Applescript 在不首先激活的情况下向应用程序发送密钥代码?

Applescript 在不首先激活的情况下向应用程序发送密钥代码?,applescript,Applescript,我正在尝试将空格键发送到应用程序而不首先激活它。下面的代码几乎满足了我的要求,但它首先将应用程序带到前台 tell application "X" activate tell application "System Events" to key code 49 end tell 之后停用它怎么样 activate application "X" tell application "System Events" to key code 49 activate me 我不认为您可

我正在尝试将空格键发送到应用程序而不首先激活它。下面的代码几乎满足了我的要求,但它首先将应用程序带到前台

tell application "X"
    activate
    tell application "System Events" to key code 49
end tell

之后停用它怎么样

activate application "X"
tell application "System Events" to key code 49
activate me

我不认为您可以向非活动应用程序发送击键,但您可以在激活应用程序并为其执行代码后立即隐藏应用程序。但是,这会导致应用程序在隐藏前短暂闪烁

tell application "System Events"
    tell application "X" to activate
    key code 49
    set visible of process "X" to false
end tell

位置在屏幕外,以防止它在用户可以看到的地方闪烁或降低其不透明度。

有调查过程

  • 如果应用程序是您自己开发的应用程序,您可以选择以下选项:

    *只需公开一个公共属性,并将其设置为要发送它的密钥。 *让应用程序轮询文件夹中的文件,然后通过该文件夹发送指令

  • 使用某种类型的windows API钩子,您可以在不激活应用程序的情况下控制应用程序。我敢肯定,只要我下定决心,我就能控制计算机上的任何东西


  • 简单地说,开箱即用,它不一定是你发送的按键,你只是想指示它做一些事情。有大量的选项界面编组、互操作、OLE、DDE,看起来我刚好及时出现在这个网站上

    发送击键基本上可以看作是使用键盘,但唯一的区别是需要按下的键已经预定义。围绕这一点的其余过程不会改变。这意味着应用程序本身仍然需要打开和激活,然后才能向其发送击键

    但是,根据应用程序的不同,可以使用应用程序API中的某些Applescript函数向应用程序发送不同的输入,而无需首先激活它。以消息API为例:

    tell application "Messages"
          set theBuddy to buddy "someone@mac.com" of service "iMessage"
          send "Hi there" to theBuddy
    end tell
    

    嗯-这似乎很明显,但为什么不直接注释掉激活的
    ?这是否意味着按键事件随后被发送到错误的应用程序?我认为告诉流程这样做会起作用:
    告诉应用程序“系统事件”告诉流程“Safari”按键“Hello World”
    。但我不在计算机上,因此无法测试它。使用任何一种建议都会导致在当前活动的应用程序中按下该键。你找到解决方案了吗?@Mark:我觉得确实不错。我已经重新打开了。你错了,至少如果你使用了AppleScript的所有功能。与其说“激活”和“可见错误”,不如说。执行shell脚本“open-g/Path/to/application/X/”。在后台打开“X”。如果“X”已经打开,这当然也是正确的。你错了,应用程序必须由AppleScript“激活”。这是非常有可能有一个应用程序“激活”在后台通过简单的命令。执行shell脚本“open-g/Path/to/application/X/”。它甚至适用于已经在后台打开的应用程序。发送到此应用程序的任何命令都会在后台接收和执行。