标签: simbl

如何实现方法调配?

我试图使用SIMBL修改程序的行为(我没有它的来源).我使用了类转储,发现我需要覆盖一个实例方法

此方法位于名为controller的类中.我需要做的就是获得参数arg1,就是这样.也许NSLog它或发布通知...我读到了Objective-c中的方法调配但我怎么能用它?我需要引用我没有的课程MessageController.

谢谢!

methods cocoa objective-c simbl swizzling

9
推荐指数
2
解决办法
1万
查看次数

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

致力于所有喜欢低级别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 cocoa macos-carbon core-graphics simbl

4
推荐指数
2
解决办法
4067
查看次数

0
推荐指数
2
解决办法
2564
查看次数