Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
在macOS上,如何打开隐藏或屏幕外的gui.app?_Macos_User Interface - Fatal编程技术网

在macOS上,如何打开隐藏或屏幕外的gui.app?

在macOS上,如何打开隐藏或屏幕外的gui.app?,macos,user-interface,Macos,User Interface,我有一个跨平台的需求,需要以编程方式打开gui应用程序,但要对用户隐藏它。实际上,我想要一个命令行驱动的界面充当这个gui应用程序的包装器,并使最终用户看不到它或与之交互。该程序来自第三方,我没有编写它,我无法编辑它 我可以在Windows、Linux和(理论上)旧版本的Mac上这样或那样做,但不是最新版本。在Windows上,我可以使用带有隐藏窗口参数的本机api ShellEx。这是非常简单和直接的。在Linux中,我可以将gui应用程序呈现到虚拟帧缓冲区(使用xvfb) 在macOS上,o

我有一个跨平台的需求,需要以编程方式打开gui应用程序,但要对用户隐藏它。实际上,我想要一个命令行驱动的界面充当这个gui应用程序的包装器,并使最终用户看不到它或与之交互。该程序来自第三方,我没有编写它,我无法编辑它

我可以在Windows、Linux和(理论上)旧版本的Mac上这样或那样做,但不是最新版本。在Windows上,我可以使用带有隐藏窗口参数的本机api ShellEx。这是非常简单和直接的。在Linux中,我可以将gui应用程序呈现到虚拟帧缓冲区(使用xvfb)

在macOS上,
open
命令有一个
--hide
--background
选项,但它们没有任何效果(至少在这个应用程序上…)

我尝试更改plist文件,发现LSUIElement将对docker隐藏应用程序,但它仍然显示在屏幕上。LSUIPresentationMode=4或3应该正好适用于这一点,但很明显,在一些操作系统版本之前,这已经没有任何作用了

我尝试了用AppleScript将.app移出屏幕的方法。这是可行的,但您必须通过系统首选项手动授予此类操作的权限。在Mac的早期版本中,这些权限可以通过sqlLite动态地进行篡改(只要您拥有sudo权限),但现在他们也阻止了这一点。显然,您只能通过禁用“SIP”并强制重新启动来实现这一点。这完全超出了我想要的范围

我曾尝试在Mac上使用xvfb方法(通过跳转来获取他们用来包含股票的二进制文件,但现在放弃了),但我在这方面运气不好。我认为不可能将一个mac.app指向另一个显示器,是吗?应用程序本质上不会在X11上渲染,对吗


在mac上隐藏第三方应用程序还有什么其他聪明的方法?(这在最新的操作系统版本中仍然有效!)

您可以发布您正在使用的plist吗?我使用LSUIElement属性隐藏应用程序,即使在Mojave上也能正常工作。感谢您的回复
LSUIElement
事实上会从dock中隐藏应用程序,并且标题栏也会隐藏。它没有做的是将应用程序完全从屏幕上移除。我相信这是我们的初衷。现在我想,
。PresentationMode
可以完全隐藏应用程序,但事实并非如此。似乎应用程序可能会尊重这一点,如果它专门为此编写代码的话,但这不是操作系统强加的自动操作。我很高兴
LSUIElement
发挥了它的作用。现在,如果我只能让我的AppleScript将位置更改为屏幕外(无需手动更改系统首选项),那么我就一切就绪了……您是否尝试过使用
LSBackgroundOnly
键?问题可能是应用程序正在明确修改自己的演示模式(例如,使用
-[NSApplication setActivationPolicy://code>)。如果是这样,您可能必须使用
DYLD\u INSERT\u库
和DYLD符号插入来捕获和防止这种情况,或者类似的事情。是的,实际上也尝试过plist选项。。。(我大约花了10个小时来做这件事!)