我正在嘗試處理鍵盤事件的窗口消息,並將它們傳遞到awesomium webview。 webview具有本地處理windows事件的功能,但主機程序必須捕獲它們併發送它們。單個物理按壓的多個字符輸入
我正在使用.net和com互操作來捕獲和發送消息。關鍵事件傳遞給我所知,但輸入是可變的。例如,在單個印刷機的文本框中輸入不同數量的字符。
這裏是我使用的(信貸Sekhat在awesomium網站)的代碼示例:
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_KEYBOARD而不是WH_GETMESSAGE時,會引發AccessViolationException。 KEYBOARD事件是否正確使用?感謝您的幫助。
編輯:我已經做了一些進一步的調查,並發現類型0x102(WM_CHAR)的多個消息正在傳遞給我的程序。傳遞的數字與awesomium輸出的字符數相匹配。我是否應該僅限於第一條消息?雖然這可能有效,但我仍然想知道爲什麼會發生這種情況。