私のC#アプリでは、キーフックを実行したいのですが、キーが押されたときに呼び出されるメソッドが別のスレッドで呼び出されるようにします。このようにして、アプリケーションが他の何かでビジー状態だったために、プログラムによってキーが省略されることはありません。どうすれば別のスレッドで作成できますか?フックを作成するスレッドによっては、キーが押されたときに呼び出されるメソッドがそのスレッドで呼び出されるという情報を見つけましたが、それは起こりません。フックしたスレッドに関係なく、このメソッドは常にメインスレッドで呼び出されます。助けてください。これが私のコードの概要です:
int HookProc(int code, int wParam, ref lParamStruct lParam)
{
// ... this should be invoked in another thread - thread th, which I use to call SetWindowsHook
}
void SetWindowsHook()
{
lpMsg msg = new lpMsg();
PeekMessage(out msg, new IntPtr(0), 0, 0, PM_NOREMOVE);
hhook = SetWindowsHookEx(WH_KEYBOARD_LL, HookProc, new IntPtr(0), 0);
while (GetMessage(out msg, new IntPtr(0), 0, 0))
{
DefWindowProc(msg.hwnd, msg.message, msg.wParam, msg.lParam);
if (abortThreadFlag)
break;
}
UnhookWindowsHookEx(hhook);
}
SetWindowsHookはこの方法で呼び出されますが、idはメソッドを別のスレッドで呼び出すように強制しません。
Thread th = new Thread(SetWindowsHook);
th.Start()