Windows:SendInputで指定した"dwExtraInfo"をグローバルフック内で取得する
Windowsで、マウスに対してSendInputをした場合で試した。
SendInput関数のINPUT構造体内のMOUSEINPUT構造体のdwExtraInfoに指定した値を、マウスのグローバルフックのコールバック関数内で取得したいときは、コールバック関数のlParamがMOUSEHOOKSTRUCTEX構造体へのポインタが渡されるので、その構造体のmouseDataを見ると指定した値が入っている。
つまり、
SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, hInst, 0); でグローバルフックを設定。その後、 INPUT Input={0}; Input.type = INPUT_MOUSE; Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; Input.mi.dwExtraInfo = MAGIC_NUMBER; SendInput(1, &Input, sizeof(Input)); で、マウス左ボタンDownをSendInputすると、指定したMAGIC_NUMBERが グローバルフックのコールバック関数であるMouseHookProcで以下のように見れる。 LRESULT CALLBACK MouseHookProc(int code, WPARAM wParam, LPARAM lParam) { ... switch(wParam){ case WM_LBUTTONDOWN: dwExtraInfo = (MOUSEHOOKSTRUCTEX *)lParam)->mouseData; if( dwExtraInfo == MAGIC_NUMBER ){ ...
MSDNには「dwExtraInfoの値はGetMessageExtraInfoで取得することができる」みたいなことが書いてあったけど、GetMessageExtraInfoでは取得できたり出来なかったり、全く確実ではなかった。
GetMessageExtraInfoで取得できる値は、どこに保存されている?
システム全体で共通?プロセスごと?スレットごと?