C#/Window

SendMessage와 PostMessage

코샵 2024. 5. 26. 18:54
반응형

윈도우 프로그래밍에서 메시지는 윈도우 간 통신과 이벤트 처리의 핵심적인 역할을 합니다. SendMessage와 PostMessage 함수는 윈도우 간 메시지를 전달하는 데 사용되는 두 가지 주요 API입니다. 

 

SendMessage

특정 윈도우에 메세지를 직접 전달하고 즉시 결과를 반환합니다. 즉, 메세지가 처리될 때까지 기다립니다.

[DllImport("user32.dll")]
public static extern IntPtr SendMessage(int hwnd, int wMsg, int wParam, string lParam);

// hwnd 메세지를 전달할 윈도우의 핸들
// wMsg 잔달할 메세지 ID
// wParam 메세지와 함께 전달할 추가 데이터
// lParam 메세지와 함께 전달할 추가 데이터
// 반환 값 : 메세지 처리 결과를 나타내는 IntPtr 값

 

PostMessage

특정 윈도우에 메세지를 전달하고 즉시 반환하지 않습니다. 메세지 큐에 메세지를 추가하고 메세지 처리 루프에서 처리될 때까지 기다립니다.

[DllImport("user32.dll")]
public static extern uint PostMessage(int hwnd, uint msg, int wParam, int lParam);

// 매개변수는 SendMessage와 같습니다. 
// 반환값 : 0(성공) 또는 오류 코드

 

SendMessage vs PostMessage

구분 SendMessage PostMessage
동기/ 비동기 동기 비동기
반환값 메세지 처리 결과 0 또는 오류코드
사용 시점 즉각적인 결과가 필요한 경우 즉각적인 결과가 중요하지 않거나 메세지 큐에 메세지를 추가하고 싶은 경우

 

주의사항

  • SendMessage와 PostMessage 함수를 사용할 때는 윈도우 핸들을 정확하게 지정해야 합니다. 잘못된 핸들을 지정하면 예상치 못한 동작을 일으킬 수 있습니다.
  • 메시지 ID와 추가 데이터는 전달하려는 메시지에 따라 정확하게 지정해야 합니다. 잘못된 값을 지정하면 오류가 발생할 수 있습니다.