티스토리 뷰
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 로 아래 주소를 참고한다.