1

SetWindowsHookExによって返される有効なhookIDを取得できず、GetLastWin32Error()も0を返すという問題に直面しています。私は以下のコードを書きました:

_LowLevelhookID = SetWindowsHookEx((int)HookType.WH_KEYBOARD_LL, LowLevelKeyboardHookHandler, IntPtr.Zero, GetCurrentThreadId());

int errorCode = -1;

if(_LowLevelhookID == (IntPtr)0)
{
    errorCode = Marshal.GetLastWin32Error(); 
}

実際、アプリケーション専用の低レベルのキーボードフックを作成したいのですが、SetWindowsHookExパラメーターの説明に従って、現在のthreadIDを設定し、アプリケーションのキーイベントのみをキャプチャする場合は、hModパラメーターをnullに設定します。

GetCurrentThreadId()が、私のアプリが実行されているThreadIDを希望する正しいメソッドであることを誰かが確認できますか?

4

1 に答える 1

2

WH_KEYBOARD_LLhook はグローバルであるため、アプリのみにインストールすることはできません。

Marshal.GetLastWin32Error()for に追加SetLastError = trueしていないため、おそらく機能していません。DllImportAttributeSetWindowsHookEx

于 2012-05-15T10:49:23.653 に答える