Может ли исполняемый файл приложения Cocoa украсть фокус у звонящего? - PullRequest
1 голос
/ 17 февраля 2011

Скажем, у меня есть стандартный вызов приложения Cocoa Foo.app (например, тот, который вы получаете, просто выбрав Новый проект> Приложение какао в XCode), если я открываю приложение через терминал с помощью:

open Foo.app/

Затем я вижу имя Фу в строке состояния вверху, и его окно находится в фокусе, перед всеми другими приложениями.

Если вместо этого я напрямую вызываю из терминала исполняемый файл, похороненный в папке .app, например:

Foo.app/Contents/MacOS/Foo

Ничего , кажется, не произойдет. При проверке приложение действительно открылось, но оно не в фокусе (терминал все еще находится), я должен найти его в доке или найти его окно.

Есть ли способ для приложения Foo, чтобы он был в фокусе при запуске? Даже если он запускается через исполняемый файл, как описано выше?

Ответы [ 5 ]

2 голосов
/ 18 февраля 2011

Ваше приложение может «украсть фокус», позвонив по номеру

[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];

Для получения дополнительной информации см. Документы NSApplication .

1 голос
/ 18 февраля 2011

Если вы спрашиваете, как дать вашему приложению (которое вы пишете) такое поведение - в пределах applicationWillFinishLaunching: вы можете позвонить [NSApp activateIgnoringOtherApps:YES].

1 голос
/ 17 февраля 2011

Вы хотели ввести:

open -a /Applications/Foo.app/

обратите внимание на параметр -a

0 голосов
/ 17 февраля 2011

Существуют (как минимум) три различных способа открытия (и взаимодействия) приложений из терминала.

  1. вы можете запустить любое Приложение (зарегистрированное в LaunchServices) из Терминала, набрав open -a ApplicationName (обратите внимание, что вам не нужен завершающий «.app» или указать какой-либо путь)

  2. вы можете открыть приложение с указанием его конкретного пути, набрав open /path/to/ApplicationName.app (вам это понадобится редко, учитывая, что приложения, вероятно, уже зарегистрированы в LaunchServices)

  3. вы можете открыть и взаимодействовать с исполняемым файлом, если вы наберете open /path/to/ApplicationName.app/Contents/MacOS/ApplicationName. Разница здесь в том, что для некоторых приложений , вы можете передавать аргументы или взаимодействовать с ними впоследствии в командной строке. Например, попробуйте open /Applications/Mail.app/Contents/MacOS/Mail - в ответ вы получите журнал отладки.

  4. вы можете взаимодействовать с некоторыми приложениями, даже не используя «open», напрямую вызывая их исполняемый файл; попробуйте /Applications/Firefox.app/Contents/MacOS/firefox-bin —help например.

Итак, если вы хотите убедиться, что приложение, запущенное из командной строки, находится в фокусе, используйте либо метод 1, либо 2.

0 голосов
/ 17 февраля 2011

возможно, AppleScript?

tell application "TextEdit"
    activate
end tell
...