Cocoa: 在CGEvent中模拟Command+Tab

5
我希望在我的应用程序中模拟“应用切换器”,我认为CGEvent可能可以实现这一点。
学习了关于CGEvent的一些基本信息后,我可以模拟按键“Command + Tab”。但是,应用程序切换器窗口只是闪烁并立即切换到另一个应用程序。
我意识到需要按住Command键并按Tab键选择应用程序。因此,以下是我的代码:
// Hold the Command key
let source = CGEventSourceCreate(.HIDSystemState)
let event = CGEventCreateKeyboardEvent(source, 55 as CGKeyCode, true)
CGEventSetIntegerValueField(event, .KeyboardEventAutorepeat, 1)
CGEventPost(.CGHIDEventTap, event)

// Press Tab key once
let source = CGEventSourceCreate(.HIDSystemState)
let keyDown = CGEventCreateKeyboardEvent(source, 48 as CGKeyCode, true)
CGEventSetFlags(keyDown, .MaskCommand)
CGEventPost(.CGHIDEventTap, keyDown)
let keyUp = CGEventCreateKeyboardEvent(source, 48 as CGKeyCode, false)
CGEventPost(.CGHIDEventTap, keyUp)

但是它不起作用!有什么想法吗?谢谢!

当我手动输入 Command-tab 时,应用程序切换窗口只是闪过并立即切换到另一个应用程序。 - Willeke
为什么要设置KeyboardEventAutorepeat? - Willeke
@WillekeοΦ¨φ½†η°Κφàëφ‰·εêΠφΖΜεä†δΜΘγ†¹CGEventSetIntegerValueField(event, .KeyboardEventAutorepeat, 1)ιÉΫφ≤Γφ€âεÖ≥γ≥ΜψIJ - Duelsol
@Willeke,也许我的表达不够准确。我发现这个讨论:How do I script the Application Switcher?和我的问题完全一样。 - Duelsol
1
抱歉,我不知道我需要按住Command键。在CGEventPost(.CGHIDEventTap, keyUp)之前尝试使用CGEventSetFlags(keyUp, .MaskCommand) - Willeke
显示剩余2条评论
1个回答

7
在keyup事件中缺少Command标志。在CGEventPost(.CGHIDEventTap, keyUp)之前添加CGEventSetFlags(keyUp, .MaskCommand)

非常抱歉,如果我的表述不够好,但您似乎是这个领域的专家。我刚刚发布了https://stackoverflow.com/questions/58673983/simulating-opt-or-other-modifiers-with-cgeventcreatekeyboardevent-cgeventse -- 如果您能提供任何见解,我将不胜感激! - P i

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接