最終更新:2015-03-31 (火) 15:46:40 (3306d)  

PeekMessage
Top / PeekMessage

プログラムにメッセージが送られているか調べる

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

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

wRemoveMsg?

  • メッセージの処理方法を指定します。
    // メッセージの処理方法オプション
    private enum PeekMsgOption
    {
      PM_NOREMOVE = 0,  // 処理後、メッセージをキューから削除しない
      PM_REMOVE      // 処理後、メッセージをキューから削除する 
    }

メモ

  • メッセージが送られていたら、後はメッセージループと同様にGetMessageでメッセージを取得(同時にメッセージキューからメッセージを削除)
    while (1) { /* メインループ */
    
          if (PeekMessage (&msg,NULL,0,0,PM_NOREMOVE)) {
    
              if (!GetMessage (&msg,NULL,0,0)) /* メッセージ処理 */
                  return msg.wParam ;
    
              TranslateMessage(&msg);
              DispatchMessage(&msg);
    
          }

System.Windows.Forms.Application.DoEvents

  • bool peeked = UnsafeNativeMethods.PeekMessage(ref msg, NativeMethods.NullHandleRef, 0, 0, NativeMethods.PM_NOREMOVE);

関連