カスタムキーボードレイアウトを作成しています。最初のステップとして、ユーザーにキーを押してもらい、キーボードフックにそれをインターセプトさせて、選択した別のキーを出力させたいと思います。
私はこのキーボードフックコードを見つけました。これは私の目的のために少し変更しようとしています:http: //blogs.msdn.com/toub/archive/2006/05/03/589423.aspx
関連する方法を次のように変更しました。
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
KBDLLHOOKSTRUCT replacementKey = new KBDLLHOOKSTRUCT();
Marshal.PtrToStructure(lParam, replacementKey);
replacementKey.vkCode = 90; // char 'Z'
Marshal.StructureToPtr(replacementKey, lParam, true);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
新しいKBD構造体オブジェクトを宣言し、キーボードフックによって提供されたKBD構造体をコピーし、オブジェクトのvkCodeを変更して別の文字を使用してから、提供されたオブジェクトを変更したバージョンで上書きします。これにより、異なる文字を書き込むという事実を除いて、すべてが同じに保たれることが期待されます。
残念ながら、それは機能していません。元のキーボード文字が入力されます。VisualStudioの出力ペインにもA first chance exception of type 'System.ArgumentException' occurred in MirrorBoard.exe
エラーが発生します。
キーボードフックをインターセプトして、選択したキャラクターに置き換えるには、ここで何ができますか?
ありがとう!