c++ - 使用 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++ - 如何使用vscode c++调试器通过gdb将参数传递给程序?
- regex - 如何在正则表达式中更改该字符串
- android - firebase ml kit人脸检测,没有人脸时画矩形,为什么?
- javascript - 具有多个值的字段上的 AG-grid 企业分组
- string - 如何选择大于
- pandas - Pandas 在索引级别内重新采样频率
- python - 创建一个具有连续秒数的数组 - strptime - KeyError : 0
- angular - 关于可观察的最佳实践
- angular - 使用一些过滤器 ES6+ 用 4 个随机不同的非重复对象填充数组
- flutter - 如何让 Flutter web 在 127.0.0.1 上收听