gpt4 book ai didi

macos - 模拟系统范围热键的按键

转载 作者:行者123 更新时间:2023-11-30 12:12:57 25 4
gpt4 key购买 nike

我需要在 OSX 中模拟击键。我是这样做的:

-(void)execute {
CGEventSourceRef sourceRef =
CGEventSourceCreate(kCGEventSourceStateHIDSystemState);

CGEventRef keyPress = CGEventCreateKeyboardEvent (sourceRef, (CGKeyCode)keyCode, true);
CGEventRef keyUnpress = CGEventCreateKeyboardEvent (sourceRef, (CGKeyCode)keyCode, false);

CGEventSetFlags(keyPress, modifierFlags);
CGEventPost(kCGHIDEventTap, keyPress);

//unpressing the acualkey
CGEventPost(kCGHIDEventTap, keyUnpress);

CFRelease(keyPress);
CFRelease(keyUnpress);
CFRelease(sourceRef);
}

它适用于任何应用程序中的每个热键或简单击键,但不适用于系统范围的快捷键,例如用于启动 Spotlight 的 option + spacecmd + shift + 4 进行屏幕截图或 ctrl + ` 打开 iTerm2 窗口。

我尝试更改事件的来源和发布事件的位置,但没有帮助。有什么想法吗?

最佳答案

来自 CGEventCreateKeyboardEvent 的文档:

All keystrokes needed to generate a character must be entered, including modifier keys. For example, to produce a 'Z', the SHIFT key must be down, the 'z' key must go down, and then the SHIFT and 'z' key must be released:

因此,您不能仅使用选项修饰符按下并释放空格来触发选项空格;你必须按选项,按空格,释放空格,释放选项。

顺便说一句,opt-space 默认情况下不执行任何操作; cmd-space 是 Spotlight 搜索热键,cmd-opt-space 是 Spotlight 窗口热键。

所以,这段代码会弹出Spotlight搜索:

- (void)execute {
CGEventSourceRef src =
CGEventSourceCreate(kCGEventSourceStateHIDSystemState);

CGEventRef cmdd = CGEventCreateKeyboardEvent(src, 0x38, true);
CGEventRef cmdu = CGEventCreateKeyboardEvent(src, 0x38, false);
CGEventRef spcd = CGEventCreateKeyboardEvent(src, 0x31, true);
CGEventRef spcu = CGEventCreateKeyboardEvent(src, 0x31, false);

CGEventSetFlags(spcd, kCGEventFlagMaskCommand);
CGEventSetFlags(spcu, kCGEventFlagMaskCommand);

CGEventTapLocation loc = kCGHIDEventTap; // kCGSessionEventTap also works
CGEventPost(loc, cmdd);
CGEventPost(loc, spcd);
CGEventPost(loc, spcu);
CGEventPost(loc, cmdu);

CFRelease(cmdd);
CFRelease(cmdu);
CFRelease(spcd);
CFRelease(spcu);
CFRelease(src);
}

关于macos - 模拟系统范围热键的按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45807487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com