[英]keybd_event showing weird behavior
我正在尝试使用以下代码模拟Enter键:
keybd_event(VK_RETURN , 0, 0, 0);
keybd_event(VK_RETURN , 0, KEYEVENTF_KEYUP, 0);
它在我的32位Windows XP操作系统上运行良好,但是当我在Windows 8 x64计算机上尝试时,模拟空格键而不是回车键。
我应该怎么做才能得到正确的结果?
我也尝试使用SendInput,如下所示,但我遇到了同样的问题。
void typeKey(short virtualKey)
{
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = virtualKey; // virtual-key code for the character
ip.ki.dwFlags = 0;
SendInput(1, &ip, sizeof(INPUT));
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
}
//function call
typeKey(VK_RETURN);
注意:我正在XP机器上编译32位可执行文件,并在Windows 8上使用相同的可执行文件。
这只是一个有根据的猜测,但是您的旧函数使用的参数类型的长度在x86到x64之间不同。 那可能是个问题。 听文档说:
注意此功能已被取代。 请改用SendInput 。
我确认您对64位Windows 8.1的观察。 由于某些原因,VK_RETURN无法与SendInput()
一起正常使用。
解决方案似乎是提供扫描代码,如下所示:
ip.ki.wScan = MapVirtualKey(virtualKey, MAPVK_VK_TO_VSC);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.