在其他应用程序窗口移动/调整大小时获取通知

时间:2015-07-01 14:42:10

标签: cocoa nsnotificationcenter nswindow nsnotifications nsapplication

我正在创建一个屏幕抓取应用程序。我现在正在尝试的是在给定应用程序的活动窗口的角落周围放置一个矩形(通过PID)。

我通过获取工作区中所有活动窗口的引用并使用CGWindowListCopyWindowInfo来匹配所有者PID来管理它。现在我有一个活动窗口的数组,但在显示包含上述所有窗口的矩形后,我没有找到一种方法来注册以获取通知,当移动和/或调整这些窗口以调整大小和适合我绘制的矩形。

以下是我用于获取所选应用程序的NSWindow帧的代码示例。

pid_t pid = [selectedApplication processIdentifier];
CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionAll,kCGNullWindowID);
for (NSMutableDictionary* entry in (NSArray*)windowList) {
      pid_t ownerPID = [[entry objectForKey:(id)kCGWindowOwnerPID] integerValue];
      if (pid == ownerPID) {
          // setting the bounds for each window of the application on match
          CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)[entry objectForKey:(id)kCGWindowBounds], &bounds); 
.....

在给定我不拥有的应用程序的特定PID的情况下,有哪些方法可以从那些NSwindow注册更新?

1 个答案:

答案 0 :(得分:0)

目前,这是Apple的API限制。没有找到任何其他方式来注册来自其他应用程序NSNotification的更新NSWindow。也许这被视为安全措施。