2014-05-10 57 views
1

我正在開發一個項目,需要使用windows.h頭文件在Microsoft Visual Studio中編碼的虛擬輸入。要做到這一點,我使用的keybd_event()方法和VkKeyScan()方法:C虛擬鍵盤輸入選擇性工作

keybd_event(VkKeyScan('w'), 0, 0, 0); 
keybd_event(VkKeyScan('w'), 0, KEYEVENTF_KEYUP, 0); 

但是,虛擬輸入僅被一些程序,如記事本,命令提示符,瀏覽器和其他應用程序所識別使用文本字段。我的項目的虛擬輸入的目的是使用客戶端來控制「VisualGameBoyAdvance」,它需要鍵盤輸入,然後將其轉換爲命令,如'w'= start,'z'=一個按鈕等。

爲什麼在文本字段中使用應用程序時會讀取虛擬輸入,而不是命令?是否有其他方法的Windows.h頭文件或有更好的方法在頭中?

更新:我一直在嘗試使用VkKeyScanEx()作爲一種替代方法,將虛擬輸入作爲一個黑暗中的努力。如何指定我的輸入區域設置標識符?我一直試圖使用UTF-8和en_AU.UTF-8,但沒有運氣。是否有翻譯如何指定的圖表?

我也使用

keybd_event(GetKeyState('w'), 0, 0, 0); 
keybd_event(GetKeyState('w'), 0, KEYEVENTF_KEYUP, 0); 

試過這並沒有在所有的工作,並試圖

while(1){ 
     /*Sleep(1000); 
     keybd_event(GetKeyState('w'), 0, 0, 0); 
     keybd_event(GetKeyState('w'), 0, KEYEVENTF_KEYUP, 0);*/ 
     // Pause for 5 seconds. 
    Sleep(500); 

    // Set up a generic keyboard event. 
    ip.type = INPUT_KEYBOARD; 
    ip.ki.wScan = 0; // hardware scan code for key 
    ip.ki.time = 0; 
    ip.ki.dwExtraInfo = 0; 

    // Press the "W" key 
    ip.ki.wVk = 0x57; // virtual-key code for the "a" key 
    ip.ki.dwFlags = 0; // 0 for key press 
    SendInput(1, &ip, sizeof(INPUT)); 

    // Release the "A" key 
    ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release 
    SendInput(1, &ip, sizeof(INPUT)); 

    // Exit normally 
    } 

回答

0

的問題是,該遊戲運行雖然DirectX的,這阻止虛擬鍵盤敲擊。通過從sys系統中直接推出遊戲,它避免了directx在一起並且運行良好:)