Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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
Cocoa应用程序的可执行文件能否从调用方窃取焦点?_Cocoa_Macos_Focus_Setfocus - Fatal编程技术网

Cocoa应用程序的可执行文件能否从调用方窃取焦点?

Cocoa应用程序的可执行文件能否从调用方窃取焦点?,cocoa,macos,focus,setfocus,Cocoa,Macos,Focus,Setfocus,假设我有一个名为Foo.app的标准Cocoa应用程序,就像在Xcode中选择New Project>Cocoa Application时得到的一样,如果我通过终端使用以下命令打开该应用程序: open Foo.app/ 然后我在顶部的状态栏上看到了Foo的名字,它的窗口在所有其他应用程序的前面处于焦点位置 相反,如果我直接从终端调用埋在.app文件夹中的可执行文件,如: Foo.app/Contents/MacOS/Foo 似乎什么也没发生。在检查时,应用程序确实已经打开,但它不在焦点中。

假设我有一个名为Foo.app的标准Cocoa应用程序,就像在Xcode中选择New Project>Cocoa Application时得到的一样,如果我通过终端使用以下命令打开该应用程序:

open Foo.app/
然后我在顶部的状态栏上看到了Foo的名字,它的窗口在所有其他应用程序的前面处于焦点位置

相反,如果我直接从终端调用埋在.app文件夹中的可执行文件,如:

Foo.app/Contents/MacOS/Foo
似乎什么也没发生。在检查时,应用程序确实已经打开,但它不在焦点中。终端仍然在,我必须在码头上找到它或找到它的窗口

Foo应用程序在运行时是否有办法确保其处于焦点?即使它通过上面描述的可执行文件运行?

也许是AppleScript

tell application "TextEdit"
    activate
end tell
也许是AppleScript

tell application "TextEdit"
    activate
end tell
你的意思是键入:

open -a /Applications/Foo.app/
注意-a选项

您的意思是键入:

open -a /Applications/Foo.app/

注意-a选项

至少有三种不同的方式可以从终端打开应用程序并与之交互

您可以从终端启动在LaunchServices中注册的任何应用程序,方法是键入open-一个不需要尾随.app或提供任何路径的应用程序名注释

您可以通过键入open/path/to/ApplicationName.app来打开一个提供其特定路径的应用程序。鉴于这些应用程序可能已经在LaunchServices中注册,您很少需要它

如果键入open/path/to/ApplicationName.app/Contents/MacOS/ApplicationName,则可以打开可执行文件并与之交互。这里的区别在于,对于某些应用程序,您可以在命令行上传递参数或随后与它们交互。例如,继续尝试打开/Applications/Mail.app/Contents/MacOS/Mail,它将返回一个调试日志

通过直接调用某些应用程序的可执行文件,即使不使用open,也可以与它们交互;试试/Applications/Firefox.app/Contents/MacOS/Firefox-bin——例如帮助。
因此,如果您确实希望确保命令行启动的应用程序处于焦点位置,请使用方法1或2。

至少有三种不同的方式可以从终端打开应用程序并与之交互

您可以从终端启动在LaunchServices中注册的任何应用程序,方法是键入open-一个不需要尾随.app或提供任何路径的应用程序名注释

您可以通过键入open/path/to/ApplicationName.app来打开一个提供其特定路径的应用程序。鉴于这些应用程序可能已经在LaunchServices中注册,您很少需要它

如果键入open/path/to/ApplicationName.app/Contents/MacOS/ApplicationName,则可以打开可执行文件并与之交互。这里的区别在于,对于某些应用程序,您可以在命令行上传递参数或随后与它们交互。例如,继续尝试打开/Applications/Mail.app/Contents/MacOS/Mail,它将返回一个调试日志

通过直接调用某些应用程序的可执行文件,即使不使用open,也可以与它们交互;试试/Applications/Firefox.app/Contents/MacOS/Firefox-bin——例如帮助。
因此,如果您确实希望确保命令行启动的应用程序处于焦点位置,请使用方法1或2。

如果您询问如何为您正在编写的应用程序提供此行为-在应用程序内WillFinishLaunching:您可以调用[NSApp activateIgnoringOtherApps:YES].

如果您询问如何为您正在编写的应用程序提供此行为-在applicationWillFinishLaunching中:您可以调用[NSApp activateIgnoringOtherApps:YES]。

您的应用程序可以通过调用

[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];

有关更多信息,请参阅文档。

您的应用程序可以通过拨打电话窃取焦点

[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];

有关更多信息,请参阅文档。

我希望不要求助于此。但目前这是最好的选择。。。看起来一个成熟的可可应用程序应该有能力做到这一点-谢天谢地,这个问题现在只提了10分钟:我希望不要求助于这个。但目前这是最好的选择。。。看起来一个成熟的可可应用程序应该有能力做到这一点-谢天谢地,这个问题现在只有10分钟了:不。。。他们做的事情或多或少是一样的。你不需要-a,事实上,你所写的不会与/after.app一起工作,你需要:open-a Foo.app,但这不是重点。我的问题的重点是避免使用open,让应用程序专注于自己的No。。。他们做的事情或多或少是一样的。你不需要-a,事实上,你所写的不会与/after.app一起工作,你需要:open-a Foo.app,但这不是重点。我的问题的重点是避免使用open,让应用程序专注于它自己为什么要覆盖正常的行为?我们正在制作一个可以从MATLAB shell调用的应用程序。正常行为在matlab窗口后打开。为什么要覆盖正常行为?我们正在制作一个可以调用的应用程序
从一个MATLAB外壳。正常行为是在matlab窗口后面打开的。注意,这将破坏其他应用程序在后台启动应用程序的能力,这可能是可取的。不清楚您为什么要强制执行此行为。请注意,这将破坏其他应用程序在后台启动您的应用程序的能力,这可能是可取的。不清楚您为什么要强制执行此行为。请注意,这将破坏其他应用程序在后台启动您的应用程序的能力,这可能是可取的。不清楚为什么要强制这种行为。谢谢,我将在命令行参数中使用它-stealFocus。因此,我可以从命令行脚本调用:Foo.app/Contents/MacOS/Foo-stealFocus-YES,它将窃取焦点。然后,作为后台应用程序的选项仍然是可能的。请注意,这将破坏其他应用程序在后台启动您的应用程序的能力,这可能是可取的。不清楚为什么要强制这种行为。谢谢,我将在命令行参数中使用它-stealFocus。因此,我可以从命令行脚本调用:Foo.app/Contents/MacOS/Foo-stealFocus-YES,它将窃取焦点。那么,作为后台应用程序的选项仍然是可能的。