2013-02-13 2 views
2

NSTask를 사용하여 외부 응용 프로그램을 시작합니다. 그러나이 시점에서 내 앱은 포커스를 잃어 버린다. 나는 이것을 원하지 않는다. 다른 응용 프로그램은 파일에 몇 가지 정보를 기록하고 내 응용 프로그램은 해당 정보를 읽고 표시합니다. 백그라운드에서 NSTask 앱을 ​​시작할 수 있습니까?NSTask 응용 프로그램이 포커스를 잃습니다

+0

[[NSRunningApplication currentApplication] performSelector:@selector(activateWithOptions:) withObject:[NSNumber numberWithUnsignedInteger:NSApplicationActivateIgnoringOtherApps] afterDelay:5.0]; 
, 내 앱이 초점을 다시 잃습니다. – CodaFi

답변

0

당신이 open 명령 (manpage)를 사용하여 응용 프로그램을 시작하면, 당신은 전경에 응용 프로그램을 가져 피하기 위해 -g 옵션을 사용하여 시도 할 수 :

-g Do not bring the application to the foreground. 

그래서보다는 NSTask이 응용 프로그램을 직접 시작하고; open을 사용하여 실수로 엽니 다.

+0

헤드리스해야한다 것처럼 보인다 외부 응용 프로그램이 두 번째 창을 열고이 시점에서 때문에, 데몬 프로세스를 작성할 수 – Lupurus

+0

@Lupurus 그래서'open -g'를 사용하여 초기 외부 응용 프로그램 창은 백그라운드에 있지만 나중에는 포커스를받는 새 창을 엽니 다. – trojanfoe

+0

흠 정확히 어디서 문제가 발생했는지 모르겠다. 더 나은 설명 일 수도 있습니다. 외부 앱은 내가 Wineskin으로 만든 앱입니다. XQuartz를 사용하여 창을 표시합니다. 이 방법으로 시작하는 .exe는 도크에서 최소화 된 최소화 된 창을 만듭니다. 터미널에서 open -g ...를 호출하려고했지만 새로운 터미널 창을 열었습니다. wineskin 앱과 터미널이 포커스를 잃어 버렸습니다. – Lupurus

0

NSTask를 사용하는 대신 NSWorkspacelaunchApplicationAtURL:options:configuration:error:을 사용하는 것이 좋습니다. NSWorkspaceLaunchWithoutAddingToRecents | NSWorkspaceLaunchWithoutActivation | NSWorkspaceLaunchAndHideoptions: 인수로 전달하면 효과적으로 보이지 않아야합니다. (나는 분명히 당신의 특별한 경우에 그것을 시도하지 않았다. 그러나 그것이 작동하도록 의도 된 것이다.)

+0

감사합니다.하지만, 제 경우에는 작동하지 않습니다. ( – Lupurus

0

NSTask를 시작한 후에 "performSelector : withObject : afterDelay"를 호출하지 않는 이유는 무엇입니까? 이것을 사용하면 적절한 지연 후에 응용 프로그램을 다시 활성화하는 선택기를 호출 할 수 있습니다. 여기에 멋진 기능이 전혀 필요하지 않습니다. 다른 앱을 앞에 놓고 그 후에 앱을 다시 활성화하십시오.

이렇게하면됩니다. 필요한 것을 지연시키기 만하면됩니다.

이 다른 프로그램이 흠, 내 경우에는,이 작동하지 않습니다
+0

고마워. 전에 비슷한 해결책을 가졌지 만 이것은별로 유용하지 않습니다. 다른 실행중인 앱 (Safari, Mail 등)으로 전환하면, ,이 코드는 또한 내 애플 리케이션을 활성화합니다 ... – Lupurus

관련 문제