티스토리 뷰

프로그래밍/API

SendMessage, PostMessage

에어버스 2016. 4. 23. 22:50

1. SendMessage

시스템 큐와 어플리케이션 큐를 거치지 않고 곧장 윈도우프로시저로 메시지 전달하여, 완전히 처리되기 전까지 반환하지 않는다. 
메시지 처리 후 반드시 처리 확인이 필요한 경우 이 함수 사용.

2. PostMEssage

시스템 큐를 거치지 않고 어플리케이션 큐에 전달.
이 함수는 큐에 전달하고 곧바로 반환된다.

 

<SendMessage 사용 예제>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define WM_GETVALUE1 WM_USER+1
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int a = 0;
    case WM_RBUTTONDOWN:
        /*
        hWnd1 = FindWindow(NULL, L"Win32Project1"); // 다른 프로그램의 윈도우 창 제목으로 핸들을 얻음
        a = SendMessage(hWnd1, WM_GETVALUE1, (WPARAM)hWnd, (LPARAM)0);
        */
        a = SendMessage(hWnd, WM_GETVALUE1, (WPARAM)hWnd, (LPARAM)0);
        break;
    case WM_GETVALUE1:
        return 190;
...
}
cs

10행에서 SendMessage() 로 WM_GETVALUE1 이라는 사용자 정의 메시지를 보내면 해당 메시지가 처리(리턴)될때까지 기다린다. 결국 WM_GWTVALUE1 메시지를 받은 12행에서 190 을 리턴해서 10행의 a 값은 190을 얻게 된다. 10행 대신 7, 8행으로 실행하면 다른 프로그램으로 메시지를 보내 값을 가져 올 수 도 있다.

다른 프로그램으로 메시지를 보내는 것은 IPC 로 아래 주소를 참고한다.

http://petra.tistory.com/992

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31