다음을 통해 공유


PeekMessageW 함수(winuser.h)

큐에 추가되지 않은 들어오는 메시지를 디스패치하고, 게시된 메시지에 대한 스레드 메시지 큐를 확인하고, 메시지(있는 경우)를 검색합니다.

통사론

BOOL PeekMessageW(
  [out]          LPMSG lpMsg,
  [in, optional] HWND  hWnd,
  [in]           UINT  wMsgFilterMin,
  [in]           UINT  wMsgFilterMax,
  [in]           UINT  wRemoveMsg
);

매개 변수

[out] lpMsg

형식: LPMSG

메시지 정보를 수신하는 MSG 구조체에 대한 포인터입니다.

[in, optional] hWnd

형식: HWND

메시지를 검색할 창에 대한 핸들입니다. 창은 현재 스레드에 속해야 합니다.

hWnd NULL경우 PeekMessage 현재 스레드에 속한 모든 창에 대한 메시지와 hwnd 값이 NULL 현재 스레드의 메시지 큐에 있는 모든 메시지를 검색합니다(MSG 구조 참조). 따라서 hWnd가 NULL경우 창 메시지와 스레드 메시지가 모두 처리됩니다.

hWnd -1이면 PeekMessage hwnd 값이 NULL현재 스레드의 메시지 큐에서 메시지만 검색합니다. PostMessage 게시한 스레드 메시지(hWnd 매개 변수가 NULL경우) 또는 postThreadMessage.

[in] wMsgFilterMin

형식: UINT

검사할 메시지 범위에서 첫 번째 메시지의 값입니다. WM_KEYFIRST(0x0100)를 사용하여 첫 번째 키보드 메시지 또는 WM_MOUSEFIRST(0x0200)를 지정하여 첫 번째 마우스 메시지를 지정합니다.

wMsgFilterMinwMsgFilterMax 모두 0이면 peekMessage 사용 가능한 모든 메시지를 반환합니다(즉, 범위 필터링이 수행되지 않음).

[in] wMsgFilterMax

형식: UINT

검사할 메시지 범위의 마지막 메시지 값입니다. WM_KEYLAST 사용하여 마지막 키보드 메시지 또는 WM_MOUSELAST 지정하여 마지막 마우스 메시지를 지정합니다.

wMsgFilterMinwMsgFilterMax 모두 0이면 peekMessage 사용 가능한 모든 메시지를 반환합니다(즉, 범위 필터링이 수행되지 않음).

[in] wRemoveMsg

형식: UINT

메시지를 처리하는 방법을 지정합니다. 이 매개 변수는 다음 값 중 하나 이상일 수 있습니다.

의미
PM_NOREMOVE
0x0000
PeekMessage처리한 후 큐에서 메시지가 제거되지 않습니다.
PM_REMOVE
0x0001
PeekMessage처리한 후 큐에서 메시지가 제거됩니다.
PM_NOYIELD
0x0002
시스템에서 호출자가 유휴 상태가 될 때까지 대기 중인 스레드를 해제하지 못하도록 합니다(waitForInputIdle참조).

이 값을 PM_NOREMOVE 또는 PM_REMOVE결합합니다.

 

기본적으로 모든 메시지 유형이 처리됩니다. 특정 메시지만 처리하도록 지정하려면 다음 값 중 하나 이상을 지정합니다.

의미
PM_QS_INPUT
(QS_INPUT << 16)
마우스 및 키보드 메시지를 처리합니다.
PM_QS_PAINT
(QS_PAINT << 16)
페인트 메시지를 처리합니다.
PM_QS_POSTMESSAGE
((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16)
타이머 및 바로 가기 키를 포함하여 게시된 모든 메시지를 처리합니다.
PM_QS_SENDMESSAGE
(QS_SENDMESSAGE << 16)
보낸 모든 메시지를 처리합니다.

반환 값

형식: BOOL

메시지를 사용할 수 있는 경우 반환 값은 0이 아닌 값입니다.

사용할 수 있는 메시지가 없으면 반환 값은 0입니다.

발언

PeekMessagehWnd 매개 변수로 식별된 창 또는 IsChild 함수에서 지정한 자식 및 wMsgFilterMinwMsgFilterMax 매개 변수로 지정된 메시지 값 범위 내에서 연결된 메시지를 검색합니다. 애플리케이션은 wMsgFilterMinwMsgFilterMax 매개 변수에서만 소문자를 사용할 수 있습니다. 높은 단어는 시스템에 예약되어 있습니다.

PeekMessage wMsgFilterMin 및 wMsgFilterMax대해 지정한 값에 관계없이 항상 WM_QUIT 메시지를 검색합니다.

이 호출 중에 다음을 수행합니다. 시스템 디스패치(DispatchMessage) 보류 중이거나 큐에 추가되지 않은 메시지, 즉 SendMessage, SendMessageCallback, SendMessageTimeout또는 SendNotifyMessage 함수를 사용하여 호출 스레드가 소유한 창으로 전송되는 메시지입니다. 그런 다음 지정된 필터와 일치하는 첫 번째 큐에 대기 중인 메시지가 검색됩니다. 시스템은 내부 이벤트를 처리할 수도 있습니다. 필터를 지정하지 않으면 메시지는 다음 순서로 처리됩니다.

  • 보낸 메시지
  • 게시된 메시지
  • 입력(하드웨어) 메시지 및 시스템 내부 이벤트
  • 보낸 메시지(다시)
  • 메시지 WM_PAINT
  • 메시지 WM_TIMER
게시된 메시지 전에 입력 메시지를 검색하려면 wMsgFilterMin 및 wMsgFilterMax 매개 변수를 사용합니다.

PeekMessage 함수는 일반적으로 큐에서 WM_PAINT 메시지를 제거하지 않습니다. WM_PAINT 메시지는 처리될 때까지 큐에 남아 있습니다. 그러나 WM_PAINT 메시지에 NULL 업데이트 지역이 있는 경우 PeekMessage 큐에서 제거됩니다.

최상위 창이 몇 초 이상 메시지에 응답하지 않는 경우 시스템은 창이 응답하지 않는 것으로 간주하고 z 순서, 위치, 크기 및 시각적 특성이 동일한 고스트 창으로 바꿉니다. 이렇게 하면 사용자가 이동하거나 크기를 조정하거나 애플리케이션을 닫을 수 있습니다. 그러나 애플리케이션이 실제로 응답하지 않기 때문에 이러한 작업만 사용할 수 있습니다. 애플리케이션을 디버그할 때 시스템에서 고스트 창을 생성하지 않습니다.

DPI 가상화

이 API는 DPI 가상화에 참여하지 않습니다. 출력은 메시지가 대상으로 하는 창의 모드에 있습니다. 호출 스레드는 고려되지 않습니다.

예제

예를 들어 메시지 큐검사하는 참조하세요.

메모

winuser.h 헤더는 PEEKMessage를 UNICODE 전처리기 상수의 정의에 따라 이 함수의 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

IsChild

MSG

메시지 및 메시지 큐

기타 리소스

참조

waitForInputIdle

waitMessage