首页 > 解决方案 > 如何为我的 AppleScript 应用程序创建 Dock 菜单?

问题描述

我刚刚使用 AppleScript 创建了一个应用程序,我想为其 Dock 菜单创建自定义菜单项,如下图所示。我怎么做?

我对 AppleScript 有点熟悉,所以如果有人能告诉我如何添加一个触发 AppleScript 脚本的菜单项,那就太好了。

停靠菜单

标签: macoscocoaapplescriptmacos-catalina

解决方案


有几种方法。一种是使用界面编辑器构建菜单并将其连接到应用程序的dockMenu插座。另一种applicationDockMenu:方法是将NSApplicationDelegate类中的方法添加到您的应用程序委托中。在这个处理程序中,您只需创建菜单并将其返回 - 当它显示时,它将被添加到 Dock 菜单中。

对于使用一些AppleScriptObjC的单个脚本文档,您还需要告诉系统委托是什么,因此可以将语句添加到run处理程序中。一个完整的应用程序将类似于:

use framework "Cocoa"
use scripting additions

on run -- example
    tell current application's NSApp to set its delegate to me
    -- other setup stuff
end run

on applicationDockMenu:sender -- return a menu to be added to the Dock menu
    tell (current application's NSMenu's alloc's initWithTitle:"")
        its addItem:(current application's NSMenuItem's alloc's initWithTitle:"Item One" action:"myMenuAction:" keyEquivalent:"")
        its addItem:(current application's NSMenuItem's alloc's initWithTitle:"Item Two" action:"myMenuAction:" keyEquivalent:"")
        return it
    end tell
end applicationDockMenu:

on myMenuAction:sender -- a regular action handler
    display dialog (sender's title) as text
    -- additional script stuff
end sharedAction:

编辑

看起来单个文档脚本对此不太适用,我的示例在退出时崩溃。不过,我已经使用 Cocoa-AppleScript Applet 进行了测试,它确实有效,尽管有一些不同的文件需要处理。

对于使用脚本编辑器中的模板构建的应用程序Cocoa-AppleScript Applet,您可以将 dockMenu 和操作处理程序放在CocoaAppletAppDelegate捆绑包中的脚本中。


推荐阅读