Как заказать окно на передний план, если вы не в приложении в Objective-C - PullRequest
9 голосов
/ 07 апреля 2010

Есть ли способ сделать "makeKeyAndOrderToFront" без участия в приложении?

Если я нахожусь в Safari и в строке меню есть пункт MenuItem для моего приложения, после того, как я нажимаю это, я хочу показать окно моего приложения спереди (makeKeyAndOrderToFront делает это, только если вы находитесь в приложении) .

Какой способ я могу использовать? И как я могу оживить это окно (например, Tweeties Add new Tweet -> atebits.com).

Спасибо!

Ответы [ 4 ]

22 голосов
/ 08 апреля 2010

Как вы обнаружили, изменение порядка окон в вашем приложении не влияет на то, какое приложение активно. Вы можете вывести свое приложение на передний план, активировав его:

[NSApp activateIgnoringOtherApps:YES];

Если бы в вашем приложении была иконка док-станции, поведение было бы аналогично нажатию на нее пользователем.

1 голос
/ 08 апреля 2010

Applescript был бы тривиально простым способом сделать ваше приложение передовым. Впрочем, анимации не будет.

tell application "System Events" to set frontmost of process "My Application" to true
0 голосов
/ 08 апреля 2010

Если ваше приложение имеет соединение с оконным сервером (что будет, если оно использует AppKit или Carbon), вы можете использовать функцию Core Services SetFrontProcess(), чтобы вывести его на передний план. SetFrontProcessWithOptions() можно использовать для вывода на передний план только самого переднего неплавающего окна вашего приложения. Эти функции доступны для 64-битных приложений, но если вы нацелены на 10.6+, вам, вероятно, лучше использовать класс NSRunningApplication. Что-то вроде

[[[NSRunningApplication
   runningApplicationsWithBundleIdentifier:ident] lastObject]
 activateWithOptions:0]

должен сделать трюк.

0 голосов
/ 08 апреля 2010

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

...