可可 – Mac OS X Window Server与X11:疯狂的任务

可可 – Mac OS X Window Server与X11:疯狂的任务,第1张

概述致力于所有喜欢低级别Window Server(CoreGraphicsPrivate.h等),Mac上的X11,SIMBL等疯狂的东西:) Mac上有一个简单的X11仿真应用程序(如xterm,xeyes等),只有一个窗口.在运行时,X11以某种方式创建了一个原生的Quartz窗口来表示这个模拟的应用程序,这个窗口可以通过Quartz Window Services访问,这样我就可以得到它的CS 致力于所有喜欢低级别Window Server(CoreGraphicsPrivate.h等),Mac上的X11,SIMBL等疯狂的东西:)

Mac上有一个简单的X11仿真应用程序(如xterm,xeyes等),只有一个窗口.在运行时,X11以某种方式创建了一个原生的Quartz窗口来表示这个模拟的应用程序,这个窗口可以通过Quartz Window Services访问,这样我就可以得到它的CSWindowID,标题,位置,大小和所有者的PID(X11.app的PID).但是它不支持Accessibility API,所以没有办法控制它(除了,可能是来自同一进程的Core Graphichs私有函数).

现在,这是任务:

我需要在这样的窗口上托管一个额外的NSVIEw(或者只是画一些东西).我的意思是一个原生的Quartz窗口,它出现在X11模拟某些应用程序的结果中.我知道,要在Mac上 *** 作Windows,我必须在同一个进程中,即X11.app.

我写了一个SIMBL插件,它插入了X11.app进程.

在那里我可以调用[NSApp windows],但是我总是得到2个NSwindows,这与实际应用程序的窗口没有任何共同之处.它们甚至在屏幕上都不可见.

然而,当我调用NSWindowList()时,我得到了我需要的任何东西(X11窗口的窗口ID)甚至更多(来自其他应用程序的窗口ID).

当我为X11模拟的窗口获得CSWindowID时,我调用[NSApp windowWithWindowNumber:](Cocoa)和HIWindowFromCGWindowID()(Carbon),但它们都返回nil!从同样的过程!

顺便说一句,当我进入Safari进程和其他人时,所有这些 *** 作都能很好地工作……

所以,问题是:

> X11是如何创建这样的窗口的,这些窗口无法通过同一个进程访问?
>我怎样才能获得指向X11窗口(NSWindow *,CGContextRef,或者至少是任何东西……)的指针并托管我的图形(我甚至不谈NSVIEw)?

非常感谢提前!

解决方法 据我所知,X11使用自己的windows服务器和通用堆栈.这就是为什么它可以运行没有特殊端口的X11应用程序.

它只有一层模仿Cocoa窗口的响应,以便它可以与通用接口通信.它不是伪装的Cocoa堆栈,它的X11堆栈表面上伪装成Cocoa.因此,它仅响应与Cocoa相关的消息的子集.

我认为要在X11中做任何严肃的事情,你必须从一开始就使用X11 API.换句话说,写一下就好像不打算在Mac OS上运行一样.

总结

以上是内存溢出为你收集整理的可可 – Mac OS X Window Server与X11:疯狂的任务全部内容,希望文章能够帮你解决可可 – Mac OS X Window Server与X11:疯狂的任务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1006879.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存