다음을 통해 공유


PostMessageA 함수(winuser.h)

지정된 창을 만든 스레드와 연결된 메시지 큐에 메시지를 배치하고 스레드가 메시지를 처리할 때까지 기다리지 않고 반환합니다.

스레드와 연결된 메시지 큐에 메시지를 게시하려면 PostThreadMessage 함수를 사용합니다.

통사론

BOOL PostMessageA(
  [in, optional] HWND   hWnd,
  [in]           UINT   Msg,
  [in]           WPARAM wParam,
  [in]           LPARAM lParam
);

매개 변수

[in, optional] hWnd

형식: HWND

창 프로시저가 메시지를 받는 창에 대한 핸들입니다. 다음 값에는 특별한 의미가 있습니다.

의미
HWND_BROADCAST
((HWND)0xffff)
메시지는 비활성 또는 보이지 않는 소유하지 않은 창, 겹친 창 및 팝업 창을 포함하여 시스템의 모든 최상위 창에 게시됩니다. 메시지는 자식 창에 게시되지 않습니다.
이 함수는 현재 스레드의 식별자에 설정된 dwThreadId 매개 변수를 사용하여 postThreadMessage 호출처럼 동작합니다.
 

Windows Vista부터 메시지 게시에는 UIPI가 적용됩니다. 프로세스의 스레드는 무결성 수준이 작거나 같은 프로세스에서 스레드의 메시지 큐에만 메시지를 게시할 수 있습니다.

[in] Msg

형식: UINT

게시할 메시지입니다.

시스템 제공 메시지 목록은 System-Defined 메시지참조하세요.

[in] wParam

형식: WPARAM

추가 메시지 관련 정보입니다.

[in] lParam

형식: LPARAM

추가 메시지 관련 정보입니다.

반환 값

형식: BOOL

함수가 성공하면 반환 값은 0이 아닌 값입니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 얻으려면 GetLastError호출합니다.

발언

메시지가 UIPI에 의해 차단되면 GetLastError함께 검색된 마지막 오류는 5(액세스 거부)로 설정됩니다.

메시지 큐의 메시지는 GetMessage 또는 peekMessage 함수를 호출하여 검색됩니다.

HWND_BROADCAST 사용하여 통신해야 하는 애플리케이션은 RegisterWindowMessage 함수를 사용하여 애플리케이션 간 통신에 대한 고유한 메시지를 가져와야 합니다.

시스템은 시스템 메시지(0에서 (WM_USER-1) 범위의 메시지만 마샬링합니다. 다른 메시지(>= WM_USER)를 다른 프로세스로 보내려면 사용자 지정 마샬링을 수행해야 합니다.

WM_USER 아래 범위의 메시지를 비동기 메시지 함수(PostMessage, SendNotifyMessageSendMessageCallback)로 보내는 경우 메시지 매개 변수에는 포인터가 포함될 수 없습니다. 그렇지 않으면 작업이 실패합니다. 수신 스레드가 메시지를 처리할 기회가 있기 전에 함수가 반환되고 발신자는 메모리가 사용되기 전에 해제됩니다.

PostMessage사용하여 WM_QUIT 메시지를 게시하지 마세요. 는 PostQuitMessage 함수를 사용합니다.

접근성 애플리케이션은 PostMessage 사용하여 WM_APPCOMMAND 메시지를 셸에 게시하여 애플리케이션을 시작할 수 있습니다. 이 기능은 다른 유형의 애플리케이션에서 작동하도록 보장되지 않습니다.

메시지 큐에는 최대 10,000개의 메시지가 포함될 수 있습니다. 이 제한은 충분히 커야 합니다. 애플리케이션이 제한을 초과하는 경우 너무 많은 시스템 리소스를 사용하지 않도록 다시 디자인해야 합니다. 이 제한을 조정하려면 다음 레지스트리 키를 수정합니다.

HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows NT
            CurrentVersion
               Windows
                  USERPostMessageLimit

함수가 실패하면 GetLastError 호출하여 확장된 오류 정보를 가져옵니다. GetLastError 제한에 도달하면 ERROR_NOT_ENOUGH_QUOTA 반환합니다.

허용되는 최소값은 4000입니다.

예제

다음 예제에서는 PostMessage 함수를 사용하여 프라이빗 창 메시지를 게시하는 방법을 보여 줍니다. 다음과 같이 WM_COMPLETE프라이빗 창 메시지를 정의한 것으로 가정합니다.

#define        WM_COMPLETE     (WM_USER + 0)

아래와 같이 지정된 창을 만든 스레드와 연결된 메시지 큐에 메시지를 게시할 수 있습니다.

 WaitForSingleObject (pparams->hEvent, INFINITE) ;
 lTime = GetCurrentTime () ;
 PostMessage (pparams->hwnd, WM_COMPLETE, 0, lTime);

자세한 예제는 데이터 링크시작을 참조하세요.

메모

winuser.h 헤더는 POSTMessage를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한 규칙을 참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱만 해당]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winuser.h(Windows.h 포함)
라이브러리 User32.lib
DLL User32.dll
API 집합 ext-ms-win-ntuser-message-l1-1-0(Windows 8에서 도입)

참고 항목

개념

GetMessage

메시지 및 메시지 큐

peekMessage

PostQuitMessage

PostThreadMessage

참조

RegisterWindowMessage

SendMessageCallback

SendNotifyMessage