在Mac上,有几种不同的方法可以做到这一点,包括:
- 枚举菜单和菜单项并读取其中的击键。这也可以通过三种不同的方式来完成:
- UI脚本。你可以通过AppleScript,ScriptingBridge,appscript,F-Script等与应用程序的“系统事件”(参见AppleScript编辑器中的字典,特别是进程套件)对话来实现这一点。这样做的缺点是用户必须启用辅助访问才能正常工作。
- 将自己的代码插入到每个应用程序中,并使用NSMenu appscript将您的代码插入到每个应用程序中,可以通过各种不同的方式来完成这些操作,但最好是编写一个SIMBL插件,这样您就不必自己弄清楚如何操作了。
- 从任何应用程序内部,如果它有一个ObjC运行时,你可以访问所有运行菜单栏的Cocoa类。在某些情况下,这甚至可以得到动态生成的菜单项,这些菜单项目前还不存在,但可能存在。
- 缺点是它在碳排放应用程序上不起作用,但每天剩下的菜单项越来越少。
- 如果你对此感兴趣,可以将fscript注入到应用程序中,并开始使用对象浏览器和脚本接口,然后你就可以从那里弄明白了。然后,您可以将所学内容翻译成可可的语言您可以将自己的代码转换到每个应用程序中,并使用HIToolbox.
- These中的Carbon菜单管理器API在Carbon /Menus.h中找到;它们比较麻烦,而且前途不大,但目前它们同时适用于Carbon和choice.
- Insert apps.
- 查看应用程序中嵌入的NIB文件。这很简单,但只处理从NIB创建的菜单。
- 查看应用程序向操作系统注册的快捷方式。这也很简单,但在现代OS中几乎是无用的,因为通常只注册全局快捷方式。(如果您打开“系统首选项”的“键盘”窗格,则可以看到其中的内容。)
在Windows上,我认为这涉及到发送某种类型的WM_*消息,但您可能希望将其作为一个单独的问题(这不是标记为osx的问题),而不是附加到这个问题。