블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2804)
Unity3D (860)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (234)
협업 (61)
3DS Max (3)
Game (12)
Utility (140)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

Try: Process.GetCurrentProcess().Handle;


출처 : http://www.gamedev.net/community/forums/topic.asp?topic_id=411575
반응형
Posted by blueasa
, |

 

.NET Control: WndProc, WmCreate (C#)

.NET Framework 상태에서 윈도우 메시지를 가로채는 것은 Win32 API 함수를 이용하는 것보다 더 쉬울 수도 있습니다.

하나의 방법은 System.Windows.Forms 네임스페이스에 있는 메시지 필터 인터페이스(IMessageFilter)를 사용하면 메시지가 컨트롤 또는 폼으로 처리(Dispatch)되기 전에 응용 프로그램에서 메시지를 가로챌 수 있습니다. 이 인터페이스를 상속받고, PreFilterMessage 함수를 구현하면 가능한데, 대부분의 마우스, 키보드 이벤트처럼 메시지 큐(Message Queue)에 전달되어 대기중인 이벤트에 대한 처리만 가능합니다. WM_CREATE, WM_ACTIVATE 이벤트처럼, Window API 함수로 직접 전달되는 함수에 대한 처리는 불가능합니다. (이 기법은 나중에 살펴보겠습니다.)

이에 대한 설명은 다음의 문서를 참고하시길 바랍니다. (MFC 라이브러리에 적용되는 내용이긴 하지만, .NET 프레임워크에서도 문서에서 설명하는 것과 마찬가지로 적용됩니다.)

http://support.microsoft.com/kb/166212

또 다른 방법은 WndProc 함수를 다시 정의(Override)하는 것입니다.

Visual Studio 환경 구성에서 .NET Framework Source 디버깅을 지원하도록 설정한 뒤에, Windows Forms 응용 프로그램을 만들고, 폼에 버튼(또는 다른 컨트롤)을 하나 올려보겠습니다. 그리고, 컨트롤을 생성하는 코드에 중단점을 설정하고 디버그로 프로젝트를 실행합니다. 중단점에 커서가 도달하면, “F11”키를 이용하여, 소스 코드의 내부로 무작정 들어갑니다. 그렇게 얼마 동안 하다 보면, “Control.CS” 파일이 나타나게 됩니다.

 

디버깅을 중지하고, “Control.CS” 파일을 살펴보겠습니다. 소스를 살펴보면, WndProc 수를 볼 수 있습니다. 이 함수에서 메시지를 처리하는 것을 보니, 전형적인 Win32 (C/C++) 코드와 비슷합니다. 단지, 언어적인 차이가 있을 뿐, 골격은 같다는 것을 알 수 있습니다. 메시지의 정의나 함수의 이름도 winuser.h 파일에 정의된 이름과 비슷합니다.

.NET Framework 기본 컨트롤 클래스는 Win32 기본 컨트롤의 속성과 이벤트 처리 함수를 감싸서(Wrapping), 만들어진 것임을 알 수 있습니다. 그러므로 .NET Framework 프로그램에서 사용된 컨트롤에 대하여, 대부분의 Win32 API 함수들의 적용이 가능합니다. 결국 모든 것은 Win32 체제로 돌아가게 되어 있는 것입니다.

 

다음의 코드에서는 버튼을 이용하여 기본 WndProc 함수를 다시 정의(Override)하여, Window 메시지를 처리해보겠습니다.

 

Windows Forms 응용 프로그램을 만들고, 클래스를 추가합니다.

추가한 클래스를 컨트롤 클래스로 만들기 위하여, 기본 컨트롤 클래스를 상속 받습니다. 추상 클래스가 아닌 어떤 클래스라도 좋습니다. (예를 들어 Control, Button, CheckBox, RadioButton……)

Win32 API 함수에서 사용되는 구조체와 함수를 정의합니다.

class MyControl : Button

    {

        private const Int32 WM_NCPAINT = 0x0085;

        private const Int32 WM_CREATE = 0x0001;

        private const Int32 WM_DRAWITEM = 0x002B;

        private const Int32 WM_REFLECT = 0x2000;

        private const Int32 WM_PAINT = 0x000F;

        private const Int32 WM_ERASEBKGND = 0x0014;

 

        [DllImport("user32.dll")]

        public extern static IntPtr BeginPaint(IntPtr hWnd, ref PAINTSTRUCT ps);

        [DllImport("user32.dll")]

        public extern static bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT ps);

        [DllImport("user32.dll")]

        public extern static IntPtr GetDC(IntPtr hWnd);

        [DllImport("user32.dll")]

        public extern static bool ReleaseDC(IntPtr hWnd, IntPtr hDC);

 

        public struct PAINTSTRUCT

        {

            private IntPtr hdc;

            public bool fErase;

            public Rectangle rcPaint;

            public bool fRestore;

            public bool fIncUpdate;

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]

            public byte[] rgbReserved;

        }

        [StructLayout(LayoutKind.Sequential)]

        public struct RECT

        {

            public Int32 left;

            public Int32 top;

            public Int32 right;

            public Int32 bottom;

        }

        public struct DRAWITEMSTRUCT

        {

            public Int32 ctlType;

            public Int32 ctlID;

            public Int32 itemID;

            public Int32 itemAction;

            public Int32 itemState;

            public IntPtr hWndItem;

            public IntPtr hDC;

            public RECT rcItem;

            public IntPtr itemData;

        }

 

추가한 클래스에 다음과 같이 WndProc 함수를 다시 정의(Override)합니다.

protected override void WndProc(ref Message m)

{

switch (m.Msg)

    {

    case WM_CREATE:

......

    break;

    case (WM_DRAWITEM | WM_REFLECT):

        WmDrawItem(ref m);

break;

    default:

        base.WndProc(ref m);

        break;

}

}

코드가 완성되면, case WM_CREATE: 줄에 중단점을 설정하고, 디버깅을 시도해봅니다. WndProc 함수가 호출되고, WM_CREATE 메시지가 전달된 것을 확인할 수 있습니다. 정말, Win32 (C/C++) 프로그램과 다른 것이 없습니다.

 

이런 식으로, Window(Control) 개체에 전달되는 이벤트(메시지)에 대한 처리 함수를 만들어서 기본 메시지 처리 프로시저를 대체하거나, 확장한다면, 앞서서 보았던 MFC, C 프로그램과 마찬가지로 컨트롤의 섬세한 제어가 가능합니다.

 

여기에 사용된 코드는 다음의 주소에서 다운로드 할 수 있습니다.

http://cid-1bbcdfedee1c617e.skydrive.live.com/self.aspx/.Public/SubclassBtn.7z

 

프로그램의 소스에서는 위에서 선언한 Window 메시지의 처리 프로시저를 작성했습니다. 각각의 메시지에 대한 기능은 역시 MSDN 문서를 참고하시길 바랍니다. 어렵지 않은 코드이므로 모든 주석은 생략했습니다.

 

어떤 프레임워크에서 응용 프로그램을 작성하더라도, 컨트롤에 대한 기본은 각각의 운영 체제에서 제공하는 각종 메시지 처리 프로시저와 그 컨트롤을 화면에 표현하기 위한 그래픽 처리 프로시저라고 생각합니다. 그 기본적인 코드는 역시 C/C++ 언어일 수 밖에 없습니다. 기본적으로 Windows 운영 체제를 작성한 언어 자체가 그런 언어이며, .NET Framework 역시 그 근본은 Win32이므로, 기본적인 것을 이해하는 것은 보다 향상된 프로그램을 작성하는데, 매우 도움이 됩니다.

출처 : http://stpetrus.spaces.live.com/blog/cns!1BBCDFEDEE1C617E!244.entry

반응형
Posted by blueasa
, |

using System;
using System.Windows.Forms;
using System.Threading; // Mutex를 사용하려면 반드시 포함시켜야 합니다.

namespace Test
{
       ///
       /// Test를 위한 UI입니다.
       ///

       public class FormTest : System.Windows.Forms.Form
       {

              //-----------------(중략)-----------------

              ///
              /// 해당 응용 프로그램의 주 진입점입니다. -> 중복 실행 방지
              ///

              [STAThread]
              static void Main()
              {
                     bool bNew;

                     Mutex mutex = new Mutex(true, "Test", out bNew);

                     // 한번만 실행되도록...
                     if (bNew)
                     {
                            Application.EnableVisualStyles();
                            Application.Run(new FormTest());
                            mutex.ReleaseMutex();
                     }
              }

              //-----------------(중략)-----------------

       }
}


//------------------------------------------------------------------------


반응형
Posted by blueasa
, |
반응형
Posted by blueasa
, |

Wrapping을 이용해 C#에서 Native C++ 프로젝트 사용하기

 

Lib 프로젝트 생성

Native C++에 해당하며, 실제 프로그램 로직등은 이곳에 속해있다.

간단하게 Framework 클래스를 만들어보자.

 

  1. class CFramework
    {
    public:
            void Create( HWND hwnd )
            { 
                    // 핸들을 받아 D3D 디바이스 생성
            }
    };

 

DLL 프로젝트 생성

프로젝트 속성에서 공용 언어 런타임 지원을(/clr) 설정해준다.

위에 작성한 프로젝트를 빌드 후 나오는 Lib 파일을 불러오고, 헤더를 추가해준다.

랩핑 클래스를 작성하고, 랩핑할 클래스의 객체를 선언 후 사용하면 된다.

밑의 코드에서 CFramework의 Create함수를 랩핑하고 있다.

 

  1.  // 엔진의 정적 라이브러리
    #ifdef _DEBUG
    #pragma comment ( lib, "Engine_d.lib" )
    #else
    #pragma comment ( lib, "Engine.lib")
    #endif

    // 랩핑 클래스 구현
    #pragma once
    #include "Framework.h" // 랩핑할 Native C++ 클래스 헤더를 참조

    using namespace System;
    namespace CWrapper {

            public ref class CFrameworkWrapper
            {
            public:
                    CFrameworkWrapper();
                    ~CFrameworkWrapper();

            public:
                    void Create( IntPtr hWnd )
                    {
                            m_hHwnd = (HWND)hWnd.ToInt32();

                            m_pFrameWork = new CFramework();
                            m_pFrameWork->Run( m_hHwnd );
                    }

            protected:
                    HWND m_hHwnd;
                    CFramework* m_pFrameWork;
            };
    }

 

C# 프로젝트 생성

C#의 Windows 응용프로그램 프로젝트를 생성해준다.

폼 디자이너에서 적당히 폼을 만들어주고 PictureBox 컨트롤을 배치해준다. 이 컨트롤에 실제 화면이 그려지게 된다.

그 다음 솔루션 탐색기에서 참조 추가를 이용해 위에 작성한 프로젝트의 DLL ( 미리 빌드 해놓자 )을 찾아서 추가해준다.

 

ref.jpg

 

ref2.jpg 

 

DLL이 성공적으로 추가 되면, 랩핑 클래스를 사용할수 있게 된다.

랩핑 클래스에서 선언한 네임 스페이스를 선언한 후 랩핑 클래스 객체를 생성하자.

그 다음 Create 함수에 PictureBox 핸들을 인자로 넘겨주면, Native C++쪽의 CFramework에서 이 핸들을 쓸수 있게된다.

정상적으로 작업이 수행되면, Native C++쪽에서 만들어지는 화면이 C#의 PitureBox에  그려지게 된다

 

  1. using CWrapper;
  2. public partial class Mainform : Form
    {
            private CFrameworkWrapper m_Frameowrk;

            public Mainform()
            {
                    InitializeComponent();
            }

            public void InitializeFramework()
            {
                    m_Frameowrk = new CFrameworkWrapper(); 
                    m_Frameowrk.Create(pictureBox1.Handle);
            }
    }

 출처 : http://tatis3.springnote.com/pages/4160233

반응형
Posted by blueasa
, |

개요

Win32 API를 불러올 때, 함수의 명칭, 인자, 리턴 값을 가지고 불러오게 되어 있다. 하지만, C#에서 타입들이 모두 객체(Object)의 형식이며, 일반적인 C 의 데이터 형과 상이한 모양을 가진다. 이러한 문제들을 해결할 수 있는 것이 PInvoke 기능이다.

 

PInvoke( Platform Invocation Service)는 관리화 코드에서 비관리화 코드를 호출할 방법을 제공한다. 일반적인 용도는 Win32 API의 호출을 위해 사용한다.

 

namespace PinvokeExample

{

using System;

 

             using System.Runtime.InteropServices; // 반드시 입력해야 한다.

 

             public class Win32

             {

                           [DllImport(“user32.dll”)]

                           public static extern int FindWindow(string a, string b);

                          

             }

}

 

위 예제는 FindWindow라는 user32.dll C함수를 사용하는 모습을 보여주고 있다. 실제 FindWindow의 선언은 다음과 같다.

 

             HWND FindWindow(LPCSTR swClassName, LPCSTR swTitle);

 

HWND는 윈도우 핸들을 표현하는 32비트 정수 이므로, int형으로 치환되고 LPCSTR 형은 NULL로 끝나는 문자열을 표현한다. 이때 PInvoke string을 자동으로 LPCSTR로 치환해 주는 역할을 하게 된다.

이 문서에서는 이처럼 Win32 API 함수의 여러 유형들을 어떻게 C#에서 사용 할 것인지에 대하여 알아보자.

 

WIN32 데이터형의 치환

Win32 API에서 일반적으로 사용하고 있는 데이터형은 모두 C#의 데이터 형으로 치환될 수 있다.

 

Win32 API TYPE

C#

BOOL, BOOLEAN

bool

BYTE

byte

CALLBACK

delegate

COLORREF

int

DWORD

int

DWORD_PTR

long

DWORD32

uint

DWORD64

ulong

FLOAT

float

HACCEL

int

HANDLE

int

HBITMAP

int

HBRUSH

int

HCONV

int

(모든 HANDLE 타입) Hxxxx

int

LPARAM

long

LPCSTR

[in] string [out] StringBuilder

LPBOOL

ref bool

이외 LP*

ref 형식

UINT

uint

Uxxxx

unsigned 타입들..

WORD

Short

WPARAM

Uint

 

 

Structure 의 전달

예를 들어 POINT 형의 경우,

typedef struct t_Point {

             int x;

             int y;

} POINT;

 

이것은 기본적으로 다음과 같이 선언될 수 있다.

[순차적]

[StructLayout(LayoutKind.Sequential)]
public struct Point {
      public int x;
      public int y;
}

 

[명시적]

[StructLayout(LayoutKind.Explicit)]
public struct Point {
      [FieldOffset(0)] public int x;
      [FieldOffset(4)] public int y;
}

 

일차적으로 할당되는 메모리 레이아웃이 동일하다면, C#에서 바로 받아 들이 수 있다.

 

// BOOL SetWindowPos(POINT pos); 이런 함수가 있다고 가정하면… ^^

 

[DllImport (“user32.dll”)]

public static extern bool SetWindowPos(Point pos);

 

사용할 함수 이름 바꾸기

여기서 함수의 이름을 바꿔서 사용하고 싶다면 다음과 같이 변경하면 된다.

 

// BOOL SetWindowPos(POINT pos);

 

[DllImport (“user32.dll”, EntryPoint = “SetWindowPos”)]

public static extern bool ShowAt(Point pos);

레퍼런스형 전달하기

 

LPPOINT형은 POINT의 포인터 형이므로 ref Point와 같이 사용 할 수 있다. 실제 사용하는 형식은 다음과 같다.

C 언어의 포인터의 경우 레퍼런스로 사용하려고 하면, ref 키워드를 사용하는 방법이 있다.

// BOOL SetWindowPos(HWND hWnd, LPRECT lpRect);

[DllImport(“user32.dll”)]

public static extern bool SetWindowPos(int hWnd, ref Rect lpRect);

 

Out형 함수 인자 사용하기

MSDN 같은 곳에서 함수의 선언을 살펴보면 다음과 같은 형식의 함수를 볼 수 있을 것이다. 이러한 형식은 레퍼런스 형으로 결과를 함수의 인자에 보내겠다는 말이다. 이러한 형식은 Win32 API에서 많이 쓰이고 있고, 포인터를 사용하므로, 많은 주의를 기울여야 한다.

 

BOOL GetWindowRect(
  HWND hWnd,      // handle to window
  LPRECT lpRect   // window coordinates
);

Parameters

hWnd

[in] Handle to the window.

lpRect

[out] Pointer to a RECT structure that receives the screen coordinates of the upper-left and lower-right corners of the window.

 

여기서 LPRECT는 앞 절에서 설명한 Structure의 전달을 참고하여 치환 될 수 있다.

여기서 lpRect RECT의 포인터이며, GetWindowRect 함수 내에서 이 포인터에 직접 값을 쓰게 되어 있다. 즉 이 포인터는 값을 기록하기 위한 인자이지, 값을 전달하기 위한 인자는 아닌 것이다. 이것은 또 다른 C# 레퍼런스 연산자인 out 키워드를 사용하여 쉽게 해결 할 수 있다.

public static extern bool GetwindowRect(int hWnd, out Rect lpRect);

 

실제 사용하는 모습은 다음과 같다.

public static extern bool GetWindowRect(int hWnd, out Rect lpRect);

public static void UseFunction() {

        Rect _rect; // 값을 대입하지 않아도 된다.

        Win32.GetWindowRect(hwnd, out _rect);

}

 

참고로 ref 키워드는 입력과 출력 둘 다 사용 할 수 있다. 그러나 ref를 사용하는 변수가 값이 설정되어 있다는 가정을 하고 있으므로, 이전에 반드시 어떠한 값을 입력해야 한다.

실제 사용 예는 다음과 같다.

public static extern bool GetWindowRect(int hWnd, ref Rect lpRect);

public static void UseFunction() {

        Rect _rect = new Rect(); // 꼭 값을 대입해야 한다.

       

        _rect.top = 20; _rect.left = 30;

        _rect.bottom = 50; _rect.right = 60;

 

        Win32.GetWindowRect(hwnd, ref _rect);

}

 

여기서 잠깐

대중없이 Rect라는 구조체가 나오는데 이는 API에서 RECT형을 C#으로 바꾸어 사용하는 structure이다. 앞의 예제들은 다음과 같은 선언을 하였다고 가정한다.

[StructLayout(LayoutKind.Explicit)]
public struct Point {
      [FieldOffset(0)] public int top;
[FieldOffset(4)] public int left;
[FieldOffset(8)] public int bottom;
[FieldOffset(12)] public int right;

}

 

 

CALLBACK 함수의 선언

C 언어에서 콜백 함수는 함수 포인터로 존재하게 된다. 이것은 함수 인스턴스의 포인터로, 함수 자체를 전달하게 되는 방식이다. 대표적으로 사용되는 부분은 EnumWindows 함수이다.

// BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARMAM IParam)

이 함수는 현재 열려 있는 모든 윈도우 핸들을 열거하기 위한 함수로 실제 처리하는 부분은 함수 포인터, 즉 콜백함수인 lpEnumFunc에서 처리하게 되어 있다. WNDENUMPROC 타입의 선언은 다음과 같다.

// typedef BOOL (CALLBACK* WNDENUMPROC)(HWND, LPARAM);

public delegate bool Callback(int hWnd, long lParam);

이러한 콜백 함수 역할을 하는 C#의 프리미티브는 delegate이다. CALLBACK delegate로 지환된다.

 

결과적으로 다음과 같이 사용하게 된다.

namespace ada.appshare

{

             public delegate bool Callback(int hwnd, int lParam);

            

             internal class Win32

             {

               

                           internal static extern int EnumWindows(CallBack x, int y);

                           [DllImport("user32.dll")]

 

                public static bool EnumWindowsCallback(int hWnd, int lParam)
                {

                        System.Console.WriteLine(“” + hWnd);

                        return true;

                }

                

             }

 

        public static void Main(String []args)

        {

                Win32.Callback call
= new Win32.Callback(Win32.EnumWindowsCallback);

                Win32.EnumWindows(call, 0);

        }

}

반응형
Posted by blueasa
, |

윈도우에 열려있는 창을 제어하기 위한 핸들값을 가져오는 API 함수
창의 클래스명이나 캡션명은 Spy++ 로 알 수 있다.
※주의사항
함수명의 대소문자가 틀리면 안된다.
FindWindowEx() 함수를 FindWindowEX() 로 했더니 에러 발생.

[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName, string lpWindowName);
-> 창의 클래스명이나 창 캡션명으로 최상위 핸들값을 가져옴.
예)
int i = FindWindow(null, "Windows Messenger");  // 창의 캡션명으로 찾기
int j = FindWindow("MSBLClass", null);  // 창의 클래스명으로 찾기

[DllImport("user32.dll")]
public static extern int FindWindowEx(int hWnd1, int hWnd2, string lpsz1, string lpsz2);
-> 인자값으로 받은 핸들의 자식 핸들을 가져옴. lpsz1 은 클래스명, lpsz2 는 캡션명.
예)
int hw2 = FindWindowEx(hw1, 0, "PluginHostClass", null);  // PluginHostClass 의 핸들값 가져옴.
int hw3 = FindWindowEx(hw2, 0, "MSBLGeneric", null);  // MSBLGeneric 클래스의 핸들값.
int hw4 = FindWindowEx(hw3, 0, MSBLGeneric", "Task List");  // MSBLGeneric 클래스이며 Task List 캡션명의 핸들값. 
반응형
Posted by blueasa
, |

인용 : http://redreans.tistory.com/17
첫번째 방법

1. 부모창에서 자식창을 선언.
private void button3_Click(object sender, EventArgs e)
{
     Form2 chfm = new Form2();
     chfm.ShowDialog(this);
}


2. 자식창에서 부모값으로 넘김

private void button1_Click(object sender, EventArgs e)
{
    ((Form1)(this.Owner)).temp = textBox1.Text;
}


두번째 방법.

1. 자식창에서 부모와 같은 클래스로 선언한다.

public Form2()
{
    InitializeComponent();
}
public Form1 fm;

2. 부모창에서 자식창을 선언할 때 자식클래스에 선언한 부모와 같은 클래스형에 참조시킨다.

private void button3_Click(object sender, EventArgs e)
{
    Form2 chfm = new Form2();
    chfm.fm = this;
    chfm.ShowDialog();
}

3. 자식창에서 다음과 같이 제어한다.

private void button1_Click(object sender, EventArgs e)
{
    fm.temp = textBox1.Text;
}


출처 : http://darak.wo.tc/xe/blog/154
반응형

'Programming > C#' 카테고리의 다른 글

C#에서 Win32 API 사용하기  (0) 2010.05.28
창 핸들값 구하는 API 함수  (0) 2010.05.28
C# Namespace 정리  (0) 2010.05.27
Windows Forms 컨트롤 사용 방법 시리즈 – Visual C#  (0) 2010.05.27
JIT  (0) 2010.05.26
Posted by blueasa
, |

C# Namespace 정리

Programming/C# / 2010. 5. 27. 21:48

Mcrosoft.CSharp : C#을 사용한 컴파일과 코드 생성 제공
Mcrosoft.JSharp : JSharp.NET 을 사용한 컴파일과 코드 생성 제공
Mcrosoft.VisualBasic : VisualBasic.NET 을 사용한 컴파일과 코드 생성 제공
Mcrosoft.Win32 : 윈도우 레지스트리 참조와 윈도우 시스템 이벤트 제공
System : 일반적으로 사용되는 값 타입과 레퍼런스 데이타 타입, 이벤트와 이벤트 핸들러, 인터페이스 , 속성, 예외 등을 포함하며, 가장 중요한 네임스페이스이다.
System.Collections : 리스트와 큐 배열, 해쉬 테이블, 사전 등과 같은 컬렉션 타입 제공
System.ComponentModel : 컴포넌트의 런타임과 디자인 타임 때 사용 제공
System.Configuration : .NET 프레임 워크 설정 세팅을 위해 참조 제공
System.Data : ADO.NET 타입 제공
System.Data.SqlClient : Sql Server.NET 데이터 타입 제공
System.Data.SqlTypes : 윈시SQL서버 데이터 타입 제공
System.Diagnostics : 디버깅과 트래킹을 위한 애플리케이션, 윈도우의 이벤트 로그 클래스제공
System.DirectoryService : LDAP이나 NDS와 같은 서비스 제공자를 사용하여 동적 디렉토리 참조 제공
System.Drawing : 윈도우 GDI+  그래픽 타입 제공
System.Globalization : 언어 수용과 관련되 타입, 스티링 정렬 순서, 나라/지역, 달력,날짜, 통화와 같은 숫자 형태 제공
System.IO : 스트림과 파일에 읽고 씀
System.Messaging : 메시지가 큐에 넣어 보내고 받고 관리하는 기능(MSMQ) 제공
System.Net : DNS와 HTTP같은 간단한 네트위크 프로토콜 API제공
System.Net.Sockets : TCP/UDp 소켓 API제공
System.Reflection : 적재된 타입과 멤버 참조 제공
System.Reflection.Emit : 메타데이터/IL 생성과 PE파일 생성 제공
System.Resources 애플리케이션 리소스위 생성과 관리 제공
System.Runtime.InteropService : COM 객체와 원시 API 참조 제공
System.Runtime.Remoting : 분산 객체의 생성과 설정 제공
System.Runtime.Remoting.Channels : 원격 채널관리와 채널 싱크(sink) 제공
System.Runtime.Remoting.Channels.Http : HTTP(SOAP) 채널 관리 제공
System.Runtime.Remoting.Channels.Tcp : TCP(이진) 채널 관리 제공
System.Runtime.Remoting.Lifetime : 원격 객체의 생명주기 관리 제공
System.Security : CLR 보안 시스템 하의 참조 제공
System.Security.Permissions : 정책에 기반한 오퍼레이션과 리소스 참조 제한 제공
System.Security.Policy : CLR 보안 정책 시스템에 적용될 규칙이 정의된 코드 그룹, 멤버쉽 상태 , 증거 제공
System.Security.Principal : 규칙 기반의 보안이 사용된 주요 클래스, 인터페이스, 열거형 제공
System.ServiceProcess : 윈도우 서비스 설치와 실행 제공
System.Text : ASCII, 유니코드, UTF-7, UTF-8 과 같은 텍스트 인코딩과 전환 제공
System.Text.RegularExpression : 이미 만들어져 있는 정규 표현식 엔진 참조 제공
System.Threading : 멀티 쓰레드 프로그래밍을 위한 클래스와 인터페이스 제공
System.Timers : 특정한 시간 간격으로 이벤트를 발생시키는 타이머 컴포넌트 제공
System.Web : HttpApplication, HttpRequest. HttpResponse 와 같은 ASP.NET 클래스에서 사용하는 기능을 포함한 브라우저/ 서버간의 통신 제공
System.Web.Configuration : ASP.NET설정 클래스와 열거형 제공
System.Web.Services : 웹 서비스 제작과 사용 제공
System.Web.Services.Description : WSDL을 사용한 웹 서비스 제공
System.Web.Services.Discovery : DISCO를 통한 웹 서비스 제공
System.Web.SessionState : ASP.NET세션 상태 참조 제공
System.Web.UI : ASP.NET 웹 페이지와 컨트롤 생성
System.Web.UI.Design : 웹 폼을 제공하기 위한 디자인 제공
System.Web.UI.Design.WebControls : 웹 컨트롤을 제공하기 위한 다지인 제공
System.Web.UI.HtmlControls : HTML 서버 컨트롤 생성 제공
System.Web.UI.WebControls : Web 서버 컨트롤 생성 제공
System.Windows.Forms : 윈도우 폼 기반의 사용자 인터페이스와 컨트롤 생성 제공
System.Windows.Forms.Design : 윈도우 품을 위한 디자인 제공
System.Xml : 표준 XML제공
System.Xml.Schema : 표준 XML스키마 제공
System.Xml.Serialization : XML문서 또는 스트림 객체의 직렬화 제공
System.Xml.XPath : XPath 파서와 평가 엔진 제공
System.Xml.Xsl : XSL전환 제공


출처 : http://amps.tistory.com/80

반응형
Posted by blueasa
, |
반응형
Posted by blueasa
, |