ホットキー アプリケーションに SendInput API を使用しようとしています。だから私がやっていることは、グローバルなキーフックを持っていることです.いくつかのキーの組み合わせがヒットすると、代わりに別のキーを送信したいと思います.
私の問題は、シミュレートされたキーを送信すると、フックがそのメッセージを受信し、再帰ループになってしまうことです。
そのため、ExtraInfo / Flags を使用してみましたが、何らかの理由で、設定した値がフックで受け取る値と同じではありません。
var down = new INPUT();
down.Type = (UInt32)InputType.Keyboard;
down.Data.Keyboard = new KEYBDINPUT();
down.Data.Keyboard.KeyCode = (UInt16)keyCode;
down.Data.Keyboard.Scan = 0;
down.Data.Keyboard.Flags = 0; //doesn't matter whatever I set here... never gets back to my hook
down.Data.Keyboard.Time = 0;
down.Data.Keyboard.ExtraInfo = IntPtr.Zero; //doesn't matter whatever I set here... never gets back to my hook
ExtraInfo / Flags に何を設定しても、フックでメッセージを受信するとリセットされます。
private IntPtr KeyStateChangeCallback(int nCode, IntPtr wParam, ref KEYBDINPUT lParam)
{
//lParam.ExtraInfo and lParam.Flags ... is always some mumbo jumbo value or zero...
}
次のようなセットアップで、低レベルキーボードフック「WH_KEYBOARD_LL」を使用しています。
proc = KeyStateChangeCallback;
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
hookID = NativeMethods.SetWindowsHookEx(WH_KEYBOARD_LL, proc, NativeMethods.GetModuleHandle(curModule.ModuleName), 0);
}
他の誰かが同様の問題を抱えていて、私を助けることができますか? 動作するコードサンプルはどれも素晴らしいでしょう:)