Windows_/Windows_C# & App

C# 에서 win32 API 사용하기

sosal 2014. 9. 4. 17:44
반응형

/*

 http://sosal.kr/
 * made by so_Sal
 */



system32 안의 DLL 파일에서 함수를 import하여 사용하면 된다.



다음의 사이트에서 많은 정보를 얻을 수 있다.

http://www.pinvoke.net/index.aspx


예를들면, user32.dll 파일 안에 있는 Sendmessage(~) 함수를 사용하고 싶을 때,

http://www.pinvoke.net/default.aspx/user32.sendmessage 에서 정보를 얻을 수 있다.




C# Signature:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);



아래와 같이 예제도 친절하게 보여준다.


 C# - Use SendMessage to set the tab width of a TextBox to a given number of characters

    private const UInt32 EM_SETTABSTOPS = 0x00CB;
    private const int unitsPerCharacter = 4;

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg,

                                     IntPtr wParam, ref IntPtr lParam);

    public static void SetTextBoxTabStopLength(TextBox tb, int tabSizeInCharacters)
    {
        // 1 means all tab stops are the the same length
        // This means lParam must point to a single

        // integer that contains the desired tab length
        const uint regularLength = 1;

        // A dialog unit is 1/4 of the average character width
        int length = tabSizeInCharacters * unitsPerCharacter;

        // Pass the length pointer by reference,

        // essentially passing a pointer to the desired length
        IntPtr lengthPointer = new IntPtr(length);
        SendMessage(tb.Handle, EM_SETTABSTOPS, (IntPtr)regularLength, ref lengthPointer);
    }


C#으로도 충분히 시스템 프로그래밍이 가능하다!