PeekMessageA 関数 (winuser.h)

キューに登録されていない受信メッセージをディスパッチし、スレッド メッセージ キューで投稿されたメッセージを確認し、メッセージ (存在する場合) を取得します。

構文

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

パラメーター

[out] lpMsg

種類: LPMSG

メッセージ情報を受信する MSG 構造体へのポインター。

[in, optional] hWnd

型: HWND

メッセージを取得するウィンドウのハンドル。 ウィンドウは現在のスレッドに属している必要があります。

hWndNULL の場合、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

メッセージの処理方法を指定します。 このパラメーターには、次の 1 つ以上の値を指定できます。

意味
PM_NOREMOVE
0x0000
PeekMessage による処理後、メッセージはキューから削除されません。
PM_REMOVE
0x0001
PeekMessage による処理後、キューからメッセージが削除されます。
PM_NOYIELD
0x0002
呼び出し元がアイドル状態になるまで待機しているスレッドがシステムによって解放されないようにします ( 「WaitForInputIdle」を参照)。

この値を PM_NOREMOVE または PM_REMOVEと組み合わせます。

 

既定では、すべてのメッセージの種類が処理されます。 特定のメッセージのみを処理するように指定するには、次の値の 1 つ以上を指定します。

意味
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 です。

注釈

PeekMessage は、isChild 関数で指定された hWnd パラメーターまたはその子のいずれかによって識別されたウィンドウに関連付けられたメッセージを、wMsgFilterMin パラメーターと wMsgFilterMax パラメーターによって指定されたメッセージ値の範囲内で取得します。 アプリケーションでは、 wMsgFilterMin パラメーターと wMsgFilterMax パラメーター内のロー ワードのみを使用できること 注意してください。高い単語はシステム用に予約されています。

PeekMessage は、wMsgFilterMin と wMsgFilterMax に指定した値に関係なく、常にWM_QUITメッセージを取得します。

この呼び出し中に、システムは保留中のキューに入れられないメッセージ (SendMessage、SendMessageCallbackSendMessageTimeout、または SendNotifyMessage 関数を使用して呼び出し元のスレッドが所有するウィンドウに送信されたメッセージ) をディスパッチします。 その後、指定したフィルターに一致するキューに入った最初のメッセージが取得されます。 システムは内部イベントを処理することもできます。 フィルターが指定されていない場合、メッセージは次の順序で処理されます。

投稿されたメッセージの前に入力メッセージを取得するには、 wMsgFilterMin パラメーターと wMsgFilterMax パラメーターを 使用します。

PeekMessage 関数は通常、キューからWM_PAINTメッセージを削除しません。 メッセージWM_PAINT 処理されるまでキューに残ります。 ただし、 WM_PAINT メッセージに NULL 更新領域がある場合、 PeekMessage はキューから削除します。

最上位のウィンドウが数秒間以上メッセージへの応答を停止した場合、システムはウィンドウが応答していないと見なし、同じ z オーダー、場所、サイズ、およびビジュアル属性を持つゴースト ウィンドウに置き換えます。 これにより、ユーザーはそれを移動したり、サイズを変更したり、アプリケーションを閉じることもできます。 ただし、アプリケーションが実際には応答しないため、これらは唯一のアクションとして使用できます。 アプリケーションがデバッグ中の場合、システムはゴースト ウィンドウを生成しません。

DPI 仮想化

この API は、DPI 仮想化には参加しません。 出力は、メッセージがターゲットとしているウィンドウのモードです。 呼び出し元のスレッドは考慮されません。

例については、「 メッセージ キューの検査」を参照してください。

注意

winuser.h ヘッダーは、PeekMessage をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll
API セット ext-ms-win-ntuser-message-l1-1-0 (Windows 8 で導入)

関連項目

概念

GetMessage

IsChild

Msg

メッセージとメッセージ キュー

その他のリソース

リファレンス

WaitForInputIdle

WaitMessage