0

非グローバル WH_KEYBOARD フックをセットアップすると、正常に動作し、すべてのキーがキャッチされます。しかし、Alt+Tab を押してからウィンドウに戻ると、フックは理由もなく動作を停止します。これは、id = root のプロセスのすべてのキーボード メッセージをブロックしようとしている私のフック プロシージャです。

private static IntPtr HookCallback (int nCode, IntPtr wParam, IntPtr lParam)
{     
 var proc = 0u;
 GetWindowThreadProcessId(GetForegroundWindow(), out proc);
 if (proc != root) return CallNextHookEx(hooks[0], nCode, wParam, lParam);
  return new IntPtr(1);
}

開発には、VirtualBox で 32 ビット Windows を使用します。

更新: 次のフックにパラメータをブロックまたは渡すことにも依存しません: 何もせずに次のフックを呼び出すコード バリアントは、Alt+Tab の後にも機能しなくなります。フォーカスを失ってウィンドウをアクティブにしても、Alt+Tab を使用しないとフックが停止しません。

4

1 に答える 1

1

いくつかのサンプルを探してコードを分析した後、この「バグ」を解決する方法を見つけました。SetWindowsHookEx 関数の最後の 2 つのパラメーターを次のように設定する必要があります。

SetWindowsHookEx(HookType.WH_KEYBOARD, HookCallback, 
                 IntPtr.Zero, GetCurrentThreadId());

しかし、このようではありません:

SetWindowsHookEx(HookType.WH_KEYBOARD, HookCallback, 
                 GetModuleHandle(curModule.ModuleName), 0);
于 2013-07-01T14:14:02.853 に答える