如何在Mac OS上的C ++中模拟打字/按键?

马克·萨吉卡扎尔

我正在尝试编写类似于Mac ID的应用程序,但有一些不同的选择。

至于我都可以看到类似的应用在那里存储在Keychain密码,只需在登录屏幕上的密码字段中键入它。

这是我根据Apple文档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”。根据文档修改键,也必须“按下”。

它出什么问题了?

然后每天google搜索后,我发现这个这似乎解决了我的问题SHIFT SO答案(虽然我对这个解决方案的正确性不是100%),但我似乎无法能够像“ÁÉÍÓÜÖ”输出的字符。

我怎样才能做到这一点?首先有可能吗?

我知道这已经是一个以上的问题,但我仍然试图解决同样的问题,我无法找到一个完美的解决方案,到目前为止,所以我想这将是很好的人有这样的答案。

非常感谢你提前,任何帮助表示赞赏。

RLT

可能会得到您想要的任何字符。你几乎是正确的道路上。我认为您只需要指定感兴趣的unicode字符即可。因此,如果您发送unicode并使用kVK_Space作为键码,则不必发送密钥,而是应该拥有所需的信息,并且在发布事件之前,可以将以下代码称为那个事件对象

if (unicode){
unichar str[2] = {0};
str[0] = (unichar)unicode;
memcpy(str, &unicode, 4);
CGEventKeyboardSetUnicodeString(theEvent, 1, str);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Mac OS上的C ++中连接到MySQL?

如何在Mac OS上使用“ nm”在C程序中显示本地(非外部)符号?

如何在Mac OS X Mavericks上的std C ++库中链接?

如何在 MAC os 上的 pycharm 中配置 vagrant venv?

如何在Java中模拟键盘按键?

如何在JavaScript中模拟按键?

如何在测试方法中模拟按键?

如何在JS中模拟按键?

如何在JS中模拟按键

如何在JS中模拟按键

如何在 Mac OSX 上使用 IDLE 监视 Python 3.7 中的按键

如何在MacOS上的C ++中检测按键?

如何在Java中的Mac OS X上的Microsoft Word中打开文件?

如何在打字稿中模拟框架对象上的击键(不要使用sendKeys方法不起作用)

如何在Mac OS X上的bash脚本中获取默认浏览器名称

如何在Mac OS上的Go(Lion-10.8)中创建OpenGL 3.2上下文

如何在conda环境中的Mac OS X上运行runsnakerun?

Python-如何在Mac OS X上的GUI应用程序中创建守护程序?

如何在终端 (Mac OS) 上打开名称中包含多个单词的文件夹

如何在Mac OS X Catalina中的PHP上加载memcached?

如何在命令行上的Mac OS中完全拉平PDF?

如何在C ++中处理按键事件

如何在VirtualBox上安装Mac OS?

如何在 Mac OS 上使用 xterm

如何在Mac OS上安装Kivy?

如何在Mac OS上安装cgroups

如何在 CodeMirror 中通过单击按钮来模拟按键?

如何在Mac OS中的iTerm中删除单词

在 C 中,如何在 Mac OS 上安装 GL/glx.h 、 GL/gl.h 和 GL/glu.h