首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cocoa Accessibility API和空间?

Cocoa Accessibility API和空间?
EN

Stack Overflow用户
提问于 2010-01-19 07:01:01
回答 2查看 1.5K关注 0票数 4

我正在编写的一个应用程序(http://code.google.com/p/blazingstars/issues/detail?id=25)遇到了一个问题,其中我的程序是一个menulet (菜单栏)应用程序,它使用可访问性API与另一个程序交互并控制另一个程序。我做了一些常见的事情,如注册API通知和通过API调用获取窗口列表等,但我不久前意识到,如果我的程序在与我交互的程序在第一个Space (虚拟桌面)中启动后在第二个Space(虚拟桌面)中启动,我的程序将崩溃并烧毁,因为它无法访问有关其目标的任何信息。(我遗漏了这个问题,有什么办法可以解决吗?)

一个简单的解决方案是弹出一个对话框,要求用户在正确的空间中重新启动程序,但在我的一生中,我不知道如何通过NSWorkspace或可访问性API来辨别我的目标所在的空间,以便我可以将其与我所在的空间进行比较。有什么想法吗?

请注意,将收集行为设置为NSWindowCollectionBehaviorCanJoinAllSpaces对我没有任何好处,因为我必须在启动时做大量工作,因此我必须从一开始就与目标处于同一空间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-21 09:03:22

我认为您可以使用CGWindow.h.中的API来实现这一点。

具体来看CGWindowListCopyWindowInfo()kCGWindowWorkspace

我已经使用这些API来做所有类型的事情,比如获取窗口内容、窗口框架等。

如果这不起作用,那么您可能想要尝试这个私有API:

代码语言:javascript
复制
 extern CGSError CGSGetWindowWorkspace(const CGSConnectionID cid,
                                       CGSWindowID wid,
                                       CGSWorkspaceID *workspace);

诀窍是获取目标进程的连接ID。

票数 5
EN

Stack Overflow用户

发布于 2010-01-19 12:21:30

您可能应该重新设计您的应用程序,以便它延迟初始化,直到您想要控制的应用程序位于当前空间中。

在Leopard下没有简单的方法来做到这一点,因为没有官方的“空间变化”通知,但this page上的博客帖子和评论可能会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2089852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档