2017-03-27 22 views
0

我需要模擬向上箭頭鍵,所以我用sendinput,我看到https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx上箭頭鍵是0x26,但問題是,程序模擬按下「L」,沒有向上的箭頭鍵,爲什麼? 下面是代碼:SendInput,爲什麼不模擬向上箭頭鍵?

INPUT ip; 
ip.type = INPUT_KEYBOARD; 
ip.ki.time = 0; 
ip.ki.wVk = 0; 
ip.ki.dwExtraInfo = 0; 
ip.ki.dwFlags = KEYEVENTF_SCANCODE; 
ip.ki.wScan =0x26; //UP ARROW key 
SendInput(1, &ip, sizeof(INPUT)); 
ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT)); 
+0

'SendInput()'返回什麼?什麼['getLastError()'](https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms679360%28v=vs.85%29.aspx)說? – YSC

+1

發送一個個事件總是一個錯誤。創建一個數組並通過一次調用將其注入到'SendInput'中。這在文檔中有解釋。我不相信你仔細閱讀過。 –

+0

而且值得一提的是,這裏沒有關於掃描碼的細節。在這種情況下,移除KEYEVENTF_SCANCODE並使用虛擬鍵碼「VK_UP」。 –

回答

1

您正在使用虛擬鍵碼作爲掃描碼,而不是實際的掃描碼。

根據this scancode table正確的值是0x48

+0

ip.ki.wScan = 0X48此模擬8 – secon25

+1

掃描碼與硬件有關。獲取掃描碼的正確方法是使用['MapVirtualKey()'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646306.aspx)/ ['MapVirtualKeyEx ()'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646307.aspx),並將'uMapType'參數設置爲'MAPVK_VK_TO_VSC'或'MAPVK_VK_TO_VSC_EX'。 –

+0

問題是,我想模擬按遊戲中的按鍵http://stackoverflow.com/questions/18647053/sendinput-not-equal-to-pressing-key-manually-on-keyboard-in-c所以我必須使用ip.ki.wScant移動 – secon25