gpt4 book ai didi

cocoa - 确定WindowServer是否可用?

转载 作者:行者123 更新时间:2023-12-03 16:10:52 25 4
gpt4 key购买 nike

我正在为 OS X 编写一个框架,可以由连接或不连接到 OS X WindowServer 的应用程序使用(即 GUI 应用程序和命令行应用程序都通过 ssh session 运行)。框架中的一个类用于跨网络和移动主目录跟踪用户主文件夹中的文件(在 OS X 上,用户可以通过 AFP 从服务器提供其主目录(“网络主目录”),或者让同步相同的主文件夹以供离线访问——“移动主目录”)。

因为我需要跨文件系统跟踪文件,所以我们选择使用相对路径,而不是 OS X 别名(或 10.6 NSURL 书签)。当找不到文件时,我需要要求用户输入以重新定位该文件(就像别名管理器如何提示用户重新连接损坏的别名)。如果应用程序具有(或可以建立)到 WindowServer 的连接,则就像使用 NSOpenPanel 一样简单。但是,当应用程序无法连接到 WindowServer 时,我需要使用替代方法来获取用户输入。

那么,我如何知道在famework代码中使用哪种方法呢?有没有办法以编程方式确定 WindowServer 连接是否可用(或可能)?

我认识到另一种架构,其中框架客户端提供回调机制来提示用户,让调用应用程序提供输入收集策略。然而,我想让调用应用程序的事情尽可能简单,所以我的第一选择是如果可以的话将这些细节封装在框架中。

最佳答案

有一个名为SECURITYSESSIONID 的环境变量,由loginwindow.app 设置并获取并传递到用户的应用程序。如果您通过 ssh 登录,则不会设置该变量。它充当与窗口服务器对话的句柄。

问题:此变量的存在并不意味着该用户当前控制窗口管理器(想想快速用户切换)。

ApplicationServices 框架中有一个名为 CGSessionCopyCurrentDictionary 的函数,看起来很有前途:

Return Value: A window server session dictionary, or NULL if the caller is not running within a Quartz GUI session or the window server is disabled. You should release the dictionary when you are finished using it. For information about the key-value pairs in this dictionary, see "Window Server Session Properties."

关于cocoa - 确定WindowServer是否可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1395044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com