如何在Mac OS上用c++模拟打字/按键
How to simulate typing/keypresses in C++ on Mac OS?
我正在尝试写一个类似于Mac ID的应用程序,但有一点不同的选项。
据我所知,所有类似的应用程序都将密码存储在Keychain中,只需在登录屏幕的密码字段中输入密码即可。
这是我基于Apple docs和Robot编写的原始代码:
#include <ApplicationServices/ApplicationServices.h>
void Press(int key);
void Release(int key);
void Click(int key);
int main() {
Press(56);
Click(6);
Release(56);
}
void Press(int key) {
// Create an HID hardware event source
CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
// Create a new keyboard key press event
CGEventRef evt = CGEventCreateKeyboardEvent(src, (CGKeyCode) key, true);
// Post keyboard event and release
CGEventPost (kCGHIDEventTap, evt);
CFRelease (evt); CFRelease (src);
usleep(60);
}
void Release(int key) {
// Create an HID hardware event source
CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
// Create a new keyboard key release event
CGEventRef evt = CGEventCreateKeyboardEvent(src, (CGKeyCode) key, false);
// Post keyboard event and release
CGEventPost (kCGHIDEventTap, evt);
CFRelease (evt); CFRelease (src);
usleep(60);
}
void Click(int key) {
Press(key);
Release(key);
}
它应该输出一个'Z',但它输出一个'Z'。根据文档修改器,键也必须"按下"。
怎么了?
然后在谷歌搜索一天后,我发现这个SO答案似乎解决了我的SHIFT问题(虽然我不是100%关于这个解决方案的正确性),但我似乎无法输出像"ÁÉÍÓÜÖ"这样的字符。
我该怎么做呢?这有可能吗?
我知道这已经不止一个问题了,但我仍然在努力解决同样的问题,到目前为止我找不到一个完美的解决方案,所以我想对其他人来说有这个答案会很好。
事先非常感谢,任何帮助都是感激的。
你可以得到任何你想要的字符。你几乎走上了正确的道路。我认为你只需要指定你感兴趣的unicode字符。而不是发送key如果你发送unicode并使用kVK_Space作为键码你应该有你需要的在发布事件之前你可以调用下面的代码1事件对象
if (unicode){
unichar str[2] = {0};
str[0] = (unichar)unicode;
memcpy(str, &unicode, 4);
CGEventKeyboardSetUnicodeString(theEvent, 1, str);
}
相关文章:
- 如何使用Google Mock来模拟gettimeofday()
- 物理键盘上的触发器按键
- G锁定铸造到基础上会释放模拟行为
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 落砂模拟碰撞检测C++和SFML
- 在gtest.中使用fff.h模拟系统API
- 模拟持久按键
- QKeyPress - 在Qt中模拟按键
- 在Qt中模拟全局按键
- C++ 模拟按键
- 如何在 Qml 中模拟按键事件?
- Linux上按键模拟的问题(Ubuntu 18)
- 有没有一种方法可以模拟C++中的按键,没有软件可以说我实际上没有按下按键
- C++-使用SendInput方法模拟按键,无法区分右键
- 使用PostMessage模拟按键仅适用于某些应用程序
- 如何在C++中模拟假按键
- 如何在Mac OS上用c++模拟打字/按键
- 用c++模拟按键,用于QML虚拟键盘
- QTermWidget:模拟按键Python/C++
- 以编程方式模拟 Alt + Enter 按键不起作用