Я использую NSTask для запуска внешнего приложения. Но в это время мое приложение теряет фокус. Я не хочу этого. Другое приложение просто записывает некоторую информацию в файл, а мое приложение читает и отображает эту информацию. Возможно ли запустить приложение NSTask в фоновом режиме?
Приложение NSTask теряет фокус
Ответы (3)
Если вы запускаете приложение с помощью команды open
(справочная страница), вы можете попробовать использовать параметр -g
, чтобы приложение не отображалось на переднем плане:
-g Do not bring the application to the foreground.
Поэтому вместо того, чтобы заставлять NSTask
запускать приложение напрямую; используйте open
, чтобы открыть его.
open -g
начальное окно внешнего приложения находится в фоновом режиме, но через некоторое время открывается новое окно, которое получает фокус?
- person trojanfoe; 13.02.2013
Я думаю, что вместо использования NSTask вы можете использовать NSWorkspace launchApplicationAtURL:options:configuration:error:
. Если вы передаете NSWorkspaceLaunchWithoutAddingToRecents | NSWorkspaceLaunchWithoutActivation | NSWorkspaceLaunchAndHide
в качестве аргумента options:
, он должен быть фактически невидимым. (Я, очевидно, не пробовал это с вашим конкретным случаем, но так оно и должно работать.)
Почему бы просто не вызвать «performSelector:withObject:afterDelay» после запуска NSTask? Используя это, вы можете после соответствующей задержки вызвать селектор, который повторно активирует ваше приложение. Здесь вам не нужно ничего особенного, просто позвольте другому приложению выйти на передний план, а затем повторно активируйте свое собственное приложение.
Это сработает. Просто установите задержку на то, что необходимо.
[[NSRunningApplication currentApplication] performSelector:@selector(activateWithOptions:) withObject:[NSNumber numberWithUnsignedInteger:NSApplicationActivateIgnoringOtherApps] afterDelay:5.0];