0
我寫了一個使用GetAsyncKeyState()的小程序,它自行工作正常。GetAsyncKeyState() - 外部程序干擾它
問題是,當我運行某個外部應用程序(不是我的)時,我的GetAsyncKeyState()完全停止接收輸入。我希望能夠運行這兩個應用程序。
我能做些什麼來強制我的程序再次接收鍵盤輸入嗎?什麼可能導致這個問題?
謝謝!
**更多詳情* *
我使用MFC和處理導致捕獲鍵盤輸入WM_TIMER消息。我所做的輸入配置,然後我打電話
if(GetAsyncKeyState(chVirtualKey) < 0) { //stuff happens }
**更新* * 我又測試程序(非MFC)建立一個鉤與我對他們有限的知識:
SetWindowsHookEx(WH_KEYBOARD_LL, &LowLevelKeyboardProc, hInstance, NULL);
然後對其進行處理:
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*) lParam;
if (p->vkCode == VK_SPACE) // spacebar key
{
SetCursorPos(400, 400); //just to test
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
這個鉤子的作品,但只有當另一個應用程序沒有運行,所以我仍然卡...
所以即使你的應用程序有焦點,你仍然失去鍵盤輸入? –
你是什麼意思,它停止接收輸入? 'GetAsyncKeyState'本身不會「接收輸入」。你什麼時候打電話?你在投票嗎?呼籲迴應消息?顯示一些源代碼... –
'Get(Async)KeyState()'依靠在調用線程中本地高速緩存的鍵盤數據。外部進程干擾的唯一方式是使用['BlockInput()'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms646290.aspx),或者在使用鉤子到達線程的消息隊列之前攔截並丟棄/修改鍵盤消息。 –