Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSTask应用程序失去焦点_Objective C_Cocoa_Nstask - Fatal编程技术网

Objective c NSTask应用程序失去焦点

Objective c NSTask应用程序失去焦点,objective-c,cocoa,nstask,Objective C,Cocoa,Nstask,我正在使用NSTask启动外部应用程序。但此时,我的应用程序失去了焦点。我不要这个。另一个应用程序只是在文件中写入一些信息,而我的应用程序读取并显示这些信息。是否可以在后台启动NSTask应用程序?如果您使用打开命令()启动应用程序,您可以尝试使用-g选项来避免将应用程序带到前台: -g Do not bring the application to the foreground. 因此,不要让NSTask直接启动应用程序;使用open来,呃,打开它。我认为您可能不想使用NSTask,而是想

我正在使用NSTask启动外部应用程序。但此时,我的应用程序失去了焦点。我不要这个。另一个应用程序只是在文件中写入一些信息,而我的应用程序读取并显示这些信息。是否可以在后台启动NSTask应用程序?

如果您使用
打开
命令()启动应用程序,您可以尝试使用
-g
选项来避免将应用程序带到前台:

-g  Do not bring the application to the foreground.

因此,不要让
NSTask
直接启动应用程序;使用
open
来,呃,打开它。

我认为您可能不想使用NSTask,而是想使用的
launchApplicationaURL:options:configuration:error:
。如果将
nsworkspacelaunchwithout addingtoreconts | nsworkspacelaunchwithout activation | NSWorkspaceLaunchAndHide
作为
选项:
参数传递,则它实际上应该是不可见的。(我显然没有在您的特定案例中尝试过,但这就是它的工作原理。)

为什么不在启动NSTask后调用“performSelector:withObject:afterDelay”?使用此选项,您可以在适当的延迟后调用选择器以重新激活应用程序。在这里你不需要任何花哨的东西,只要让另一个应用程序出现在最前面,然后重新激活你自己的应用程序

这会奏效的。只需将延迟设置为所需的时间

[[NSRunningApplication currentApplication] performSelector:@selector(activateWithOptions:) withObject:[NSNumber numberWithUnsignedInteger:NSApplicationActivateIgnoringOtherApps] afterDelay:5.0];

你可以编写一个守护进程,因为这另一个应用程序似乎应该是无头的,在我的情况下,这不起作用,因为外部应用程序会打开第二个窗口,从这一点开始,我的应用程序再次失去了焦点。@Lupurus因此,通过使用
open-g
初始外部应用程序窗口位于后台,但一段时间后,它打开了一个新窗口,获取了焦点?嗯,我不知道问题到底出在哪里。也许更好的解释是:外部应用程序是我用Wineskin创建的一个应用程序。它使用XQuartz显示窗口。以这种方式启动的.exe创建了一个最小化窗口,该窗口在dock中也被最小化。我试着打电话给open-g。。。从终端,但它只是打开了一个新的终端窗口,wineskin应用程序,然后终端松开focus@Lupurus听起来像是一场失败的战斗;我认为如果没有对外部应用程序的更多控制,这是不可能的。如果是你写的,那么也许可以把你需要的部分切掉,放到一个可以与两个应用程序链接的库中?好的。。。也许我可以在Wineskin代码中找到一些东西。非常感谢。谢谢我以前也有过类似的解决方案,但这不是很有用:如果我切换到另一个正在运行的应用程序(可能是Safari、Mail等),这段代码也会激活我的应用程序。。。