Objective-C: получить информацию о меню из внешнего приложения

Я пытаюсь написать дополнительное приложение меню Mac OS, которое отображает контекстное меню, содержащее элементы строки меню текущего активного приложения, когда пользователь нажимает какую-либо горячую клавишу. С отображением контекстного меню я могу справиться хорошо, но я не могу получить пункты панели меню текущего активного приложения. На данный момент я использую [[[NSWorkspace sharedWorkspace] runningApplications] filteredArrayUsingPredicate:] чтобы получить имя активных приложений, но NSRunningApplication, кажется, содержит немного другой ценной информации. Есть ли способ получить информацию о меню приложений из внешнего приложения?

ОБНОВИТЬ:

Использование инфраструктуры ScriptingBridge, кажется, работает довольно хорошо, если вы счастливы с помощью AppleScript:

    SystemEventsApplication* sevApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.systemevents"];
    SystemEventsProcess* proc = [[sevApp applicationProcesses] objectWithName:appName];

    for (SystemEventsMenuBar* menuBar in proc.menuBars) {
        for (SystemEventsMenuBarItem* menuBaritem in menuBar.menuBarItems) {
            NSLog(@"%@", menuBaritem.name);
        }
    }

распечатает список меню, доступных в строке меню приложения. Не удалось найти контекстное меню, поэтому я пока не буду отвечать на этот вопрос...

Это тоже было полезно: http://robnapier.net/blog/scripting-bridge-265

1 ответ

Вы можете использовать AppleScript для имитации щелчка по пункту меню, как показано здесь, но я не уверен, возможно ли динамическое получение имен всех элементов меню, чтобы использовать этот метод, вам нужно, чтобы имена уже были жестко запрограммированы в приложении.

Другие вопросы по тегам