【问题标题】:Sending System Events key down/up using JXA使用 JXA 向下/向上发送系统事件键
【发布时间】:2015-08-15 05:31:28
【问题描述】:

我一直在努力解决这个问题,想知道您是否可以提供帮助。

使用 AppleScript,系统事件应用程序中提供了两个隐藏功能,可让您按下某个键(在完成其他操作(如单击)时按住它),然后再次将键恢复。

例如在此处查看答案Applescript to run Detect Displays,其中在执行单击时使用“向上键”和“向下键”。

但是为了这个例子,让我们使用一些非常简单的东西,一个保存快捷方式。

AppleScript 如下所示:

tell application "System Events"
    key down command
    keystroke "s"
    key up command
end tell

我在 JXA 中得到的最接近的如下,但无论我传递给 keyDown 什么,它都会发送字母“a”:

events = Application("System Events")
events.keyDown("command")
events.keystroke("s")
events.keyUp("command")

有什么想法吗?

谢谢!
福蒂斯

【问题讨论】:

  • 除非您别无选择,否则切勿在 System Events 中使用 key up / key down。在这里你有:keystroke "s" using command down
  • 根据我的帖子,我仅以 cmd + s 为例。最初的目的是在stackoverflow.com/questions/12640643/… 的帖子中重现 AppleScript,我认为必须使用按键向下和向上操作,因为脚本在按住按键时单击按钮。您可以在github.com/fgimian/macbuild/blob/master/detectdisplays.js 看到我完成的脚本
  • 知道了,我只想提一下key up / key down 的使用非常危险。如果键按下时发生错误,它会保持按下状态!
  • @vadian 绝对同意!这就是为什么在我的 detectdisplay.js 脚本中使用 try / catch 块至关重要的原因。我对此进行了相当彻底的测试,并确认它的工作非常可靠,但如果没有异常处理,它确实很危险。

标签: javascript-automation


【解决方案1】:

好的,解决方案很难找到,但我知道了 :)

您可以使用特殊字符串 eCmd(命令)、eOpt(选项)和 eCnt(控制)来完成 SystemEvents.h 中定义的操作。

因此,以下代码有效!

events = Application("System Events")
events.keyDown("eCmd")
events.keystroke("s")
events.keyUp("eCmd")

希望这对那里的人有所帮助。

【讨论】:

    【解决方案2】:

    怎么样:

    events = Application("System Events")
    events.keystroke("s", {
        using:"command down"
    });
    

    祝你有美好的一天,迈克尔/汉堡

    【讨论】:

    • 感谢您的回复,这确实是实现我发布的代码的更好方法。但是,根据我的帖子,我试图在stackoverflow.com/questions/12640643/… 重现 AppleScript,并且仅提供了我的 Cmd + s 脚本作为示例以简化我的问题。
    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多