繁体   English   中英

keybd_event显示奇怪的行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM