次の方法で共有


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(つまり、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 メッセージを取得します。

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

  • 送信済みメッセージ
  • 投稿されたメッセージ
  • 入力 (ハードウェア) メッセージとシステム内部イベント
  • 送信されたメッセージ (もう一度)
  • メッセージの WM_PAINT
  • メッセージの WM_TIMER
ポストされたメッセージの前に入力メッセージを取得するには、wMsgFilterMin を使用し、wMsgFilterMax パラメーターを します。

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

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

DPI 仮想化

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

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

手記

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

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー 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 の