c++ - keybd_event 表现出奇怪的行为

标签 c++ windows winapi

我正在尝试使用以下代码模拟回车键:

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 不等。这可能是个问题。听文档说:

Note This function has been superseded. Use SendInput instead.

关于c++ - keybd_event 表现出奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23380216/

相关文章:

c++ - 模板成员函数调用—— "error: expected primary-expression before ' int'”

c++ - 检查是否可以删除目录树而不实际开始删除它

c# - 在窗体区域外绘图时如何重绘

c# - 在 Windows 7 上启动 exe 程序时会触发什么事件?

c++ - 与阴险的错误联盟

c++ - c++ 中的 sqlite - 来自不同应用程序的并行插入,会发生什么?

C++,sprintf_s 的包装函数

python - 逗号从 Windows 中的 Python 3 sys.argv 中消失

c - 将数据动态复制到二维字符数组时发生访问冲突

c# - 在 C# 中无限/定期执行代码的最佳实践