有没有办法使用AppleScript单击osx菜单项而不访问“系统事件”?

时间:2012-10-29 19:32:47

标签: objective-c cocoa applescript appstore-sandbox applescript-objc

我使用这样的代码自动执行一些菜单点击,而不是每次都自己执行:

tell application "System Events" to tell process "myApp"
   click something and so on
end tell

现在,为了在osx lion沙箱中完成这项工作,我的权利文件看起来像这样(做了很多研究来解决这个问题):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>com.apple.security.app-sandbox</key>
        <true/>
        <key>com.apple.security.temporary-exception.apple-events</key>
        <array>
            <string>com.apple.systemevents</string>
            <string>com.apple.iphonesimulator</string>
        </array>
    </dict>
</plist>

现在,正如上帝所希望的那样,苹果拒绝了这个应用,因为我正在访问com.apple.systemevents。有没有办法使用System Events单击指定应用程序菜单中的指定菜单项?

2 个答案:

答案 0 :(得分:3)

没有。将UI事件发送到另一个进程本质上违反应用程序沙盒。

答案 1 :(得分:0)

我知道已经有一段时间了,我刚刚找到了你的问题。

为了它的价值,您可能需要查看MouseTools和Click实用程序: http://www.hamsoftengineering.com/codeSharing/MouseTools/MouseTools.html

http://hints.macworld.com/article.php?story=2008051406323031

Objective-C代码附带它。我已经成功地在我的应用程序中使用它来点击屏幕的其他部分而不使用AppleScript。

另一种方法是使用JavaScript进行UI自动化。在Apple开发者网站上查找这些关键字。我想发布链接但不可能因为论坛限制:(

在这两种情况下,您都必须为应用添加临时权利,以便点击在沙盒中工作。