본문 바로가기
CODING/Trouble Shooting

C# pInvoke Button Click (SendMessage, PostMessage)

by marketingsj 2022. 12. 16.

SendMessage(동기식)

PostMessage(비동기식)

 

윈도우 핸들의 버튼을 클릭하는 명령을 수행 시 Button Down 후 Button Up에 대한 반환을 무한히 기다리는 SendMessage를 사용할 시 Button Up이 될 때까지 다음 구문이 실행되지 않는 오류를 발견,

 

따라서 다음과 같은 코드로 대체할 수 있다. (LeftClick_AsyncUP 참고)

public static void ClickButton(IntPtr h_btn, ClickType type)
{
    switch (type)
    {
        case ClickType.LeftClick:
            SendMessage(h_btn, WindowMessage.WM_LBUTTONDOWN, 0, 0);
            SendMessage(h_btn, WindowMessage.WM_LBUTTONUP, 0, 0);
            break;
        case ClickType.LeftClick_AsyncUP:
            SendMessage(h_btn, WindowMessage.WM_LBUTTONDOWN, 0, 0);
            PostMessage(h_btn, WindowMessage.WM_LBUTTONUP, 0, 0);
            break;
        case ClickType.LeftDoubleClick:
            SendMessage(h_btn, WindowMessage.WM_LBUTTONDBLCLK, 0, 0);
            break;
        case ClickType.RightClick:
            SendMessage(h_btn, WindowMessage.WM_RBUTTONDOWN, 0, 0);
            SendMessage(h_btn, WindowMessage.WM_RBUTTONUP, 0, 0);
            break;
        case ClickType.RightDoubleClick:
            SendMessage(h_btn, WindowMessage.WM_RBUTTONDBLCLK, 0, 0);
            break;
    }
}

댓글