【问题标题】:Simulated key command not working since OS upgrade操作系统升级后模拟的键盘命令不起作用
【发布时间】:2017-08-22 06:32:24
【问题描述】:

我考虑将其发布到Ask Different,但由于主要关注代码,我认为它属于这里。

我在我的 Mac 上创建了一个用于切换空间的宏,并且自从升级到 Sierra 之后,以下 AppleScript 不再工作。有谁知道有什么变化吗?

tell application "System Events" to key code 124 using control down

tell application "System Events" to key code 123 using control down

这是在终端中运行时的输出(注意^[[1;5D):

14:16 isaac@Isaac ~ $ osascript -e 'tell application "System Events" to key code 123 using control down'
^[[1;5D14:18 isaac@Isaac ~ $ ;5D

当通过 AppleScript Editor 运行时,什么也没有发生。

【问题讨论】:

    标签: applescript


    【解决方案1】:

    是的,这是一个错误。

    要使用 Control 键模拟一些全局快捷键,该命令需要 fn 键(Sierra 的解决方法)。

    fn 键不能与 AppleScript 的 key code 命令一起使用,但可以通过 Python 脚本中的 Core Graphics 框架的方法使用。


    这是模拟这个快捷方式的脚本 --> (右箭头 + Control),你可以在 Terminal 中运行脚本(在 sh、bash 或任何类似的外壳)

    /usr/bin/python -c 'import time; import Quartz.CoreGraphics as QCG; e = QCG.CGEventCreateKeyboardEvent(None, 124, True); QCG.CGEventSetFlags(e, (QCG.kCGEventFlagMaskControl | QCG.kCGEventFlagMaskSecondaryFn)); QCG.CGEventPost(QCG.kCGHIDEventTap, e); time.sleep(0.1); QCG.CGEventSetType(e, QCG.kCGEventKeyUp); QCG.CGEventPost(QCG.kCGHIDEventTap, e)'
    

    这是在“脚本编辑器”应用程序中测试的 AppleScript:

    --  For switching spaces, 124 = the Right Arrow key, use 123 for the Left Arrow key
    do shell script "/usr/bin/python -c 'import time; import Quartz.CoreGraphics as QCG; e = QCG.CGEventCreateKeyboardEvent(None, 124, True); QCG.CGEventSetFlags(e, (QCG.kCGEventFlagMaskControl | QCG.kCGEventFlagMaskSecondaryFn)); QCG.CGEventPost(QCG.kCGHIDEventTap, e); time.sleep(0.1); QCG.CGEventSetType(e, QCG.kCGEventKeyUp); QCG.CGEventPost(QCG.kCGHIDEventTap, e)'"
    

    【讨论】:

    • 你这个传奇人物......我还以为出事了
    • 我尝试了您的解决方案 jackjr300,但它对我不起作用。这在最新版本的 OS X 中仍然有效吗?
    • 这个bug可能已经解决了,我不知道,因为我还没有安装high Sierra。尝试删除脚本中的| QCG.kCGEventFlagMaskSecondaryFn
    【解决方案2】:

    确保您的键码与系统偏好设置中的键盘快捷键匹配。这是我在系统偏好设置中的键盘快捷键,它们确实与我的 AppleScript 命令一致。

    tell application "System Events"
        key code 18 using (control down) -- Desktop 1
    end tell
    
    tell application "System Events"
        key code 19 using (control down) -- Desktop 2
    end tell
    
    tell application "System Events"
        key code 20 using (control down) -- Desktop 3
    end tell
    
    tell application "System Events"
        key code 21 using (control down) -- Desktop 4
    end tell
    

    这些功能在最新版本的 Sierra 中对我来说是正确的。

    【讨论】:

    • 很奇怪,这些键似乎可以工作...不是 ctrl + left 或 ctrl + right 命令
    猜你喜欢
    • 2019-11-03
    • 2020-03-31
    • 1970-01-01
    • 2015-10-15
    • 2022-08-17
    • 2012-07-30
    • 2014-01-23
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多