macos - 如何为我的 AppleScript 应用程序创建 Dock 菜单?
问题描述
我刚刚使用 AppleScript 创建了一个应用程序,我想为其 Dock 菜单创建自定义菜单项,如下图所示。我怎么做?
我对 AppleScript 有点熟悉,所以如果有人能告诉我如何添加一个触发 AppleScript 脚本的菜单项,那就太好了。
解决方案
有几种方法。一种是使用界面编辑器构建菜单并将其连接到应用程序的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
捆绑包中的脚本中。
推荐阅读
- sql - BigQuery 中的按比例
- python - 命令在被某人使用 discord.py 后每 x 秒工作一次
- wpf - WPF Datagrid RowheaderTemplate with Expander => 使 RowDetailHeader 可点击
- javascript - 错误:Material-UI:数据网格组件要求所有行都具有唯一的 id 属性。在 rows 道具中提供了没有 id 的行:
- elasticsearch - 对 Elasticsearch 的困惑
- c++ - 空结构是否有意义?
- sql - 与 SQL 数据透视表斗争
- python - 尝试在 python 中对数组进行线性回归,但我不断收到错误“数组不得包含 infs 或 NaN”。没有 inf 或 NaN
- c++ - 使用模板的 C++ 重载解析
- python-3.x - 根据大型数据集的多个条件合并 pandas 数据帧