PeekMessage

https://msdn.microsoft.com/ja-jp/library/ms644958.aspx https://msdn.microsoft.com/ja-jp/library/cc429415.aspx https://msdn.microsoft.com/ja-jp/library/ms644958.aspx https://msdn.microsoft.com/ja-jp/library/cc429415.aspx

着信した送信済みメッセージをディスパッチ(送出)し、スレッドのメッセージキューにポスト済みメッセージが存在するかどうかをチェックし、存在する場合は、指定された構造体にそのメッセージを格納します。

BOOL PeekMessage(
  LPMSG lpMsg,         // メッセージ情報
  HWND hWnd,           // ウィンドウのハンドル
  UINT wMsgFilterMin,  // 最初のメッセージ
  UINT wMsgFilterMax,  // 最後のメッセージ
  UINT wRemoveMsg      // 削除オプション
);

パラメータ

lpMsg
1 個の 構造体へのポインタを指定します。関数から制御が返ると、この構造体に、メッセージ情報が格納されます。
hWnd
メッセージの取得に使う(取得元)ウィンドウのハンドルを指定します。
wMsgFilterMin
取得対象のメッセージの最小値を整数で指定します。
wMsgFilterMax
取得対象のメッセージの最大値を整数で指定します。
wRemoveMsg
メッセージの処理方法を指定します。次の値のいずれかを指定します。
意味
PM_NOREMOVEPeekMessage 関数がメッセージを処理した後、そのメッセージをキューから削除しません。
PM_REMOVEPeekMessage 関数がメッセージを処理した後、そのメッセージをキューから削除します。

オプションで、PM_NOYIELD フラグを、PM_NOREMOVE と PM_REMOVE のどちらかのフラグに組み合わせて使うこともできます。PM_NOYIELD フラグを指定すると、呼び出し側がアイドル状態になるのを待っているスレッドが存在する場合、システムがそのスレッドを解放することを防止できます( 関数を参照してください)。

既定では、PeekMessage 関数はすべてのメッセージタイプを処理します。特定のメッセージタイプだけを処理するよう指定するには、次の値のいずれかまたは任意の組み合わせを指定してください。

意味
PM_QS_INPUTWindows 98 と Windows 2000:マウスメッセージとキーボードメッセージを処理します。
PM_QS_PAINTWindows 98 と Windows 2000:ペイントメッセージを処理します。
PM_QS_POSTMESSAGEWindows 98 と Windows 2000:タイマとホットキーを含め、すべてのポスト済みメッセージを処理します。
PM_QS_SENDMESSAGEWindows 98 と Windows 2000:すべての送信済みメッセージを処理します。

戻り値

メッセージを取得した場合、0 以外の値が返ります。

メッセージを取得しなかった場合、0 が返ります。

解説

PeekMessage 関数は、hWnd パラメータで指定したウィンドウと、IsChild function 関数で子と判断されるウィンドウのいずれかに関連付けられているメッセージのうち、wMsgFilterMin wMsgFilterMax の各パラメータで指定されたメッセージ範囲に該当するものだけを取得します。hWnd パラメータで NULL を指定した場合、PeekMessage 関数を呼び出した現在のスレッドに所属する任意のウィンドウに関連付けられているメッセージを取得します(PeekMessage 関数は、ほかのスレッドに所属するウィンドウに関連付けられているメッセージは取得しません)。hWnd パラメータで -1 を指定すると、PeekMessage 関数は、PostThreadMessage 関数がポストした、hWnd パラメータで NULL を指定しているメッセージを取得します。wMsgFilterMin wMsgFilterMax の両方のパラメータで 0 を指定すると、PeekMessage は利用可能なすべてのメッセージを返します(メッセージのフィルタリングを行いません)。wMsgFilterMin wMsgFilterMax の各パラメータでどのような値を指定した場合でも、PeekMessage は必ず WM_QUIT メッセージを取得することに注意してください。

wMsgFilterMin パラメータで WM_KEYFIRST 定数、wMsgFilterMax パラメータで WM_KEYLAST 定数を指定すると、キーボード入力に関係するメッセージだけを取得できます。同様に、それぞれ WM_MOUSEFIRST 定数と WM_MOUSELAST 定数を指定すると、マウスに関係するメッセージだけを取得できます。

PeekMessage 関数を呼び出すと、呼び出し側スレッドが所有しているウィンドウへ送信されたメッセージのうち、保留されていたものを取得できます。SendMessageSendMessageCallbackSendMessageTimeoutSendNotifyMessage の各関数を使って送信されたメッセージが、これに該当します。システムは、内部イベントを処理することもあります。メッセージは、次の順序で処理されます。

•送信済みメッセージ

•ポスト済みメッセージ

•入力(ハードウェア)メッセージとシステムの内部イベント

•送信済みメッセージ(再度)

WM_PAINT メッセージ

WM_TIMER メッセージ

ポスト済みメッセージより先に入力メッセージを取得するには、wMsgFilterMin wMsgFilterMax の各パラメータを使ってください。メッセージの値の一覧については、MSDN ライブラリの[検索]タブで「4.6 Event Notification Interface」と「WM_APP」を参照してください。

PeekMessage 関数は通常、メッセージキューから WM_PAINT メッセージを削除しません。WM_PAINT メッセージは、処理が終わるまではキュー内にとどまります。ただし、WM_PAINT メッセージの更新領域が NULL の場合、PeekMessage 関数はその WM_PAINT メッセージを削除します。

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h 内で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装

参照

GetMessage, IsChild, , , WaitMessage

表示: