操作系统升级后,模拟键命令无效

时间:2017-08-16 02:22:40

标签: applescript

我考虑将此帖子发布到Ask Different,但由于主要关注代码,我认为它属于此处。

我已经在我的mac上创建了一个用于切换空间的宏,并且由于升级到Sierra,以下AppleScript不再有效。有谁知道某些事情是否发生了变化?

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 ):

spark.sql.shuffle.partitions

当通过AppleScript编辑器运行时,没有任何反应。

2 个答案:

答案 0 :(得分:2)

确保您的密钥代码与系统偏好设置中的键盘快捷键相匹配。以下是我在系统偏好设置中的键盘快捷键,它们与我的AppleScript命令完全吻合。

enter image description here

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中正确使用。

答案 1 :(得分:2)

是的,这是一个错误。

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

使用AppleScript的key code命令无法使用 fn 键,但可以使用 Python中的Core Graphics框架的方法 script。

这是模拟此快捷方式的脚本 - > (右箭头+控制),您可以在终端中运行脚本(在sh,bash或任何类似的shell中)

/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)'"