1

これが私の関数のプロトタイプです:

LRESULT CALLBACK JournalRecoProc(int code, WPARAM wParam, LPARAM lParam) {

}

ENTER またはマウスボタンがクリックされた場合、内部を確認するにはどうすればよいですか? lParam を使用する必要があると思いますが、方法が見つかりませんでした。

4

1 に答える 1

0

MSDNが言うように:

フック プロシージャがWM_KEYFIRSTから WM_KEYLASTの範囲のメッセージを返す場合、次の条件が適用されます。

  • EVENTMSG構造体のparamLメンバーは、押されたキーの仮想キー コードを指定します。
  • EVENTMSG構造体のparamHメンバーは、スキャン コードを指定します。
  • 繰り返し回数を指定する方法はありません。イベントは、常に 1 つの重要なイベントを表すものと見なされます。

したがって、次のようにアクセスします。

LRESULT CALLBACK JournalPlaybackProc(int code, WPARAM wParam, LPARAM lParam)
{
    // ... blah blah ...

    if (code == HC_GETNEXT)
    {
        // examine eventmsg
        EVENTMSG *pEvent = (EVENTMSG*)lParam;

        // keypress
        if (pEvent->message >= WM_KEYFIRST &&
            pEvent->message <= WM_KEYLAST)
        {
            // decode key press
            unsigned int uVirtualKeyCode = pEvent->paramL;
            unsigned int uScanCode = pEvent->paramH;

            // do your conditional checks here
            if (uVirtualKeyCode == VK_ENTER)
            {
                // Enter key was pressed
            }
        }
        else if (pEvent->message == WM_LBUTTONDOWN)
        {
            // left mouse click
        }
        else // ... add checks for other messages ....
    }

    // ... blah blah ...
}
于 2014-01-14T14:11:52.177 に答える