我对在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开发的新手。任何提示都非常欢迎。谢谢!
答案 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