キーボード イベントの Windows メッセージを処理し、それらを awesomium WebView に渡そうとしています。WebView には Windows イベントのネイティブ処理がありますが、ホスト プログラムはそれらをキャプチャして送信する必要があります。
メッセージをキャプチャして送信するために、.net と com 相互運用機能を使用しています。主要なイベントは私の知る限りでは引き継がれますが、入力は可変です。たとえば、1 回のプレスでテキスト ボックスに入力される文字数はさまざまです。
これが私が使用しているコードのサンプルです(awesomiumサイトのSekhatの功績による):
private void CreateHook()
{
uint threadId = Win32.GetWindowThreadProcessId(hWnd, IntPtr.Zero);
//hHook = Win32.SetWindowsHookEx(Win32.HookType.WH_CALLWNDPROC, wndProcDelegate, IntPtr.Zero, threadId);
hHook = Win32.SetWindowsHookEx(Win32.HookType.WH_GETMESSAGE, wndProcDelegate, IntPtr.Zero, threadId);
}
private int WndProcHook(int nCode, IntPtr wParam, ref Win32.Message lParam)
{
if (nCode >= 0)
{
Win32.TranslateMessage(ref lParam);
WndProc(ref lParam);
}
return Win32.CallNextHookEx(hHook, nCode, wParam, ref lParam);
}
wndProcDelegate = WndProcHook;
イベントの処理が間違っていて、入力の数が可変になっていませんか? 関連する部分は上にあると思いますが、必要に応じて残りを投稿できます。
ちなみに、WH_GETMESSAGE の代わりに WH_KEYBOARD を使用すると、AccessViolationException がスローされます。KEYBOARD イベントは使用するのに適していますか? ご協力ありがとうございます。
編集: さらに調査を行ったところ、タイプ 0x102 (WM_CHAR) の複数のメッセージがプログラムに渡されていることがわかりました。渡された数は、awesomium が出力している文字数と一致します。これを最初のメッセージだけに制限する必要がありますか? これはうまくいくかもしれませんが、なぜこれが起こっているのか知りたいです。