MacOS应用程序运行Applescript在其他应用程序上执行击键

时间:2019-01-27 22:48:49

标签: macos applescript

我对在MacOS应用中运行applescript有疑问。

我想创建一个Mac App,它可以执行Applescript在Chrome上复制所选文本。

这是Applescript:

tell application "Google Chrome"
    activate
    try
        tell application "System Events"
            keystroke "c" using {command down}
        end tell
    on error
        display dialog "error" buttons {"OK"}
    end try
end tell

delay 1
set selectedText to the clipboard

这个想法是我将这个Applescript保存在分布式Mac App中,然后让该应用执行该脚本。

在开发环境(在编译为{Appname} .app之前)中,它可以成功切换到Chrome并复制所选文本。

但是,将其捆绑为{Appname} .app后,如果尚未运行Chrome,则可以激活Chrome,但无法执行Command + C键盘组合。

我的猜测是该应用没有询问Accessibility in Security Setting,因此我将其添加并打开了它。但这仍然行不通。

我也尝试添加entitlement设置,但仍然失败:

<key>com.apple.security.temporary-exception.apple-events</key>
<array>
   <string>com.google.Chrome</string>
   <string>com.apple.systemevents</string>
</array>

有人知道可能的解决方案吗?

我是Mac App开发的新手。任何提示都非常欢迎。谢谢!

1 个答案:

答案 0 :(得分:2)

Google Chrome实际上具有复制选择命令。无需将系统事件纳入方程式。

if application "Google Chrome" is running then
    set the clipboard to ""
    tell application "Google Chrome"
        tell active tab of window 1
            copy selection
        end tell
    end tell
    set selectedText to the clipboard
end if

或者您也可以在代码中插入以下处理程序(我宁愿在脚本底部添加我的代码)

to copySelection(theApp)
    set the clipboard to ""
    activate application theApp
    repeat while application theApp is not frontmost
        delay 0.2
    end repeat
    tell application "System Events"
        tell application process theApp
            keystroke "c" using {command down}
        end tell
    end tell
    set selectedText to (the clipboard)
end copySelection

然后,只要您想运行该处理程序,就可以使用以下代码行(插入应用程序名称而不是我的TextEdit示例)来调用它

copySelection("TextEdit") -- Replace With Your Desired App