首页 > 解决方案 > 使用 C 发送键盘事件

问题描述

所以我正在使用 Java 并且我可以使用 Robot 来进行按键操作。现在我们想要使用按键的软件部分不接受这些(它们什么都不做),但键盘可以工作。

所以我尝试的第一件事是使用一个 C dll 库,它使用 SendInput 发送密钥。如果我在https://keycode.info/之类的网站上使用它们,它们会比机器人按键效果更好(它们显示更多信息,更类似于实际的键盘按键。

然而,仍然不是所有的软件都注册输入。大多数这样做我知道他们正在“正常”工作,但对于某些应用程序,他们仍然构成一个谜。如果使用了一些键盘检测软件,当我按下实际键盘上的按钮时它工作正常,但 java Robot 库和 C SendInput 都显示该软件中的任何活动。

我错过了什么?(最小的工作示例)

#include <windows.h>

int main() {

INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = 0;
ip.ki.wScan = MapVirtualKey(0x41, MAPVK_VK_TO_VSC);
ip.ki.dwFlags = KEYEVENTF_SCANCODE;

SendInput(1, &ip, sizeof(INPUT));

sleep(100);

ip.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;

SendInput(1, &ip, sizeof(INPUT));
return;
}

我也玩过按下和释放之间的时间,但这似乎并不重要(对于某些应用程序,它确实如此,但对于键盘测试器它没有。)

我真的很想模拟键盘键,但我不确定在哪里寻找它,SendInput 似乎是我能得到的最低级别,但似乎我错了,有什么想法或解决方案吗?

标签: c++windowskeypresssendinput

解决方案


推荐阅读