OS X: доступ к главному меню самого переднего приложения

---редактировать---

есть приложение под названием Keycue который выполняет эту функцию.

---/редактировать---

--- редактировать редактировать ---

это дубликат. Получить список всех ярлыков из другого приложения

--- / редактировать редактировать ---

Я изо всех сил пытаюсь написать приложение, которое берет переднюю панель меню приложения (т. Е. Если Safari открыто, меню safari, если XCode открыт, меню Xcode) и анализирует ярлыки из него.

Вещи, которые я до сих пор пробовал, и потерпел неудачу с:

1: Потратил неделю на изучение appleScript. Поиграли с "Системными событиями", чтобы получить строку меню, однако я не могу найти там никакой информации, которая даст мне коды быстрого доступа.

2: Рассматривал попытку KVO, с NSWorkspace. Попытка получить NSRunningApplication, но есть только свойство ownsMenuBar, которое является BOOL, а не NSMenu.

3: попытался получить NSApplication от NSWorkspace, NSBundle и NSRunningApplication. Все безрезультатно.

4: Пытался получить NSMenu из appleScript (безуспешно.)

Я думаю, что следующее, что я хотел бы попробовать, это поиск приложения NSRunningApplication с YES для ownsMenuBar, а затем попытаться получить соответствующее приложение NSApplication откуда-нибудь. хотя пока не знаю, где.

Так какие-нибудь предложения??

1 ответ

Решение

Пытаться:

tell application "System Events"
    set frontProcess to name of first process whose frontmost = true
    tell process frontProcess
        get every menu item of menu 1 of menu bar item 2 of menu bar 1
    end tell
end tell

РЕДАКТИРОВАТЬ
Когда у вас есть этот список, вы можете анализировать атрибуты каждого пункта меню:

tell application "System Events"
    set frontProcess to name of first process whose frontmost = true
    tell process frontProcess
        set myMenuItems to get every menu item of menu 1 of menu bar item 2 of menu bar 1
        set myList to {}
        repeat with aMenuItem in myMenuItems
            set end of myList to aMenuItem's name
            set end of myList to value of aMenuItem's attribute "AXMenuItemCmdChar"
            set end of myList to value of aMenuItem's attribute "AXMenuItemCmdModifiers"
        end repeat
    end tell
end tell
Другие вопросы по тегам