如何重新定义Cocoa窗口?

时间:2010-06-14 15:03:06

标签: cocoa

我需要在另一个应用程序的窗口上托管我的窗口。 如何枚举另一个Cocoa应用程序的窗口?是否可以控制 他们? 如果不是:我如何在另一个应用程序的窗口上绘图? 谢谢!

3 个答案:

答案 0 :(得分:3)

  

如何枚举另一个Cocoa应用程序的窗口?

您可以使用Accessibility API枚举其他应用程序的窗口。无论该应用程序是否为Cocoa都无关紧要。

  

是否可以控制它们?

在这里,间接地确定应用程序是否为Cocoa(或使用标准控件的Carbon)。更确切地说,重要的是应用程序是否可访问。

通常可以移动另一个窗口,调整其大小,或者使用控件进行简单的操作(例如按下按钮)。

无法将其中一个窗口粘贴到另一个应用程序的窗口中。你必须观察它的位置,并在另一个移动时移动你的窗口。在实时拖动之后,这种方式是不可能的。

  

如果不是:我如何在另一个应用程序的窗口上绘图?

你做不到。你只能在自己的窗户上画画。

您可以创建一个透明的覆盖窗口并在其上绘制,但这会让您回到将其中一个窗口粘贴到另一个应用程序中的窗口的问题。

你可能应该通过将一个窗口粘贴到另一个应用程序中的窗口或通过绘制到另一个应用程序的窗口来提出一个更广泛的问题,即你希望实现的目标。

答案 1 :(得分:0)

结帐CGWindow.h

CGWindowListCreateDescriptionFromArray()可能正是您所寻找的。

答案 2 :(得分:-1)

Cocoa不支持重新显示另一个应用程序窗口或在其上绘图。

但是,有两种方法可以获取所有应用程序的窗口属性,如位置,大小,z顺序等。

  1. Accessibility API (还允许控制外部应用程序窗口:移动,调整大小,按下按钮等)。如果外部应用程序不支持Accessibility API,那么......
  2. Quartz Window Services 以及一个名为“Son of Grab”的示例代码。