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
メッセージを取得するウィンドウのハンドル。 ウィンドウは現在のスレッドに属している必要があります。
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) を使用して最初のマウス メッセージを指定します。
wMsgFilterMin と wMsgFilterMax の両方が 0 の場合、PeekMessage は使用可能なすべてのメッセージを返します (つまり、範囲フィルター処理は実行されません)。
[in] wMsgFilterMax
型: UINT
調べるメッセージの範囲内の最後のメッセージの値。 WM_KEYLASTを使用して、最後のキーボード メッセージを指定するか、最後のマウス メッセージを指定するWM_MOUSELASTを使用します。
wMsgFilterMin と wMsgFilterMax の両方が 0 の場合、PeekMessage は使用可能なすべてのメッセージを返します (つまり、範囲フィルター処理は実行されません)。
[in] wRemoveMsg
型: UINT
メッセージの処理方法を指定します。 このパラメーターには、次の 1 つ以上の値を指定できます。
値 | 意味 |
---|---|
|
PeekMessage による処理後、メッセージはキューから削除されません。 |
|
PeekMessage による処理後、キューからメッセージが削除されます。 |
|
呼び出し元がアイドル状態になるまで待機しているスレッドがシステムによって解放されないようにします ( 「WaitForInputIdle」を参照)。
この値を PM_NOREMOVE または PM_REMOVEと組み合わせます。 |
既定では、すべてのメッセージの種類が処理されます。 特定のメッセージのみを処理するように指定するには、次の値の 1 つ以上を指定します。
戻り値
種類: BOOL
メッセージが使用可能な場合、戻り値は 0 以外です。
使用可能なメッセージがない場合、戻り値は 0 です。
注釈
PeekMessage は、isChild 関数で指定された hWnd パラメーターまたはその子のいずれかによって識別されたウィンドウに関連付けられたメッセージを、wMsgFilterMin パラメーターと wMsgFilterMax パラメーターによって指定されたメッセージ値の範囲内で取得します。 アプリケーションでは、 wMsgFilterMin パラメーターと wMsgFilterMax パラメーター内のロー ワードのみを使用できること に 注意してください。高い単語はシステム用に予約されています。
PeekMessage は、wMsgFilterMin と wMsgFilterMax に指定した値に関係なく、常にWM_QUITメッセージを取得します。
この呼び出し中に、システムは保留中のキューに入れられないメッセージ (SendMessage、SendMessageCallback、SendMessageTimeout、または SendNotifyMessage 関数を使用して呼び出し元のスレッドが所有するウィンドウに送信されたメッセージ) をディスパッチします。 その後、指定したフィルターに一致するキューに入った最初のメッセージが取得されます。 システムは内部イベントを処理することもできます。 フィルターが指定されていない場合、メッセージは次の順序で処理されます。
- 送信されたメッセージ
- 投稿されたメッセージ
- 入力 (ハードウェア) メッセージとシステム内部イベント
- 送信されたメッセージ (もう一度)
- メッセージのWM_PAINT
- メッセージのWM_TIMER
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 で導入) |
関連項目
概念
その他のリソース
リファレンス