キーボードメッセージにフックをかけようとしています。SetWindowsHookExを使用してキーボードメッセージをフックする際の問題
extern __declspec(dllexport) LRESULT CALLBACK HookProc(
int nCode,
WPARAM wParam,
LPARAM lParam
)
{
// process event
//...
MessageBox(NULL,
TEXT("OK"),
TEXT("OK"),
MB_OK);
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
すべてがうまくコンパイルが、私はしようとしているとき:私もHookProc機能を備えたテストのWin32 DLLを作成しました
int _tmain(int argc, _TCHAR* argv[])
{
HOOKPROC hHookProc;
HINSTANCE hinstDLL;
HHOOK hHook;
hinstDLL = LoadLibrary(TEXT("pathtodll\\KeyHook.dll"));
hHookProc= (HOOKPROC)GetProcAddress(hinstDLL, "HookProc");
hHook = SetWindowsHookEx(
WH_KEYBOARD,
hHookProc,
hinstDLL,
0);
while (1) {}
return 0;
}
:
は、私がテストコンソールのWin32アプリケーションを作成しますデバッグ、HookProcが呼び出されることはないようです。実際には勝利7では、私は任意のキーを押すとアプリケーションがハングしますが、Win XPではHookProcは呼び出されません。私はNULL hinstDLL、hHookProc、hHookを取得しません。
私は何を見逃していますか?
それは働いていた:しかし、私は完全に理解できない理由:( – Blim
私は言ったように、いくつかのフックは、それらをインストールするスレッドのコンテキストで実行されます。コンテキストでは、OSはスレッドのメッセージキューを使用するため、スレッドは新しいメッセージのために定期的にメッセージキューをポンピングしてフックを実行する必要があります。 –
問題はGetMessage()が返さないことですが、私はこれらのすべてのものを説明するいくつかのドキュメントを見つけることを試みているが、特定のものを見つけることができず、メッセージキューの必要性に関する何かがフックに関するmsdnドキュメンテーションの一部に記載されていない。 – Blim