2017-03-27 60 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