0

I'm creating a screen scraping application. What I'm trying now is to fit a rectangle around the corners of the active windows of a given application (by PID).

I managed that by getting a reference to all the active windows in the workspace and using CGWindowListCopyWindowInfo to match the owner PID. Now I have an array of the active windows, but after showing the rectangle that incorporates all the windows as above stated, I didn't find a way to register to get notifications when those windows are moved and / or resized in order to resize and fit my drawn rectangle.

The following is a sample of the code I used to get the NSWindow's frames of the selected application.

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); 
.....

Is there any way in which I can register for updates from those NSwindows given a specific PID of an application I don't own ?

StefanS
  • 1,089
  • 1
  • 11
  • 38

1 Answers1

0

Currently this is a limitation of the APIs from Apple. Didn't find any other way to register for update NSNotifications from other applications NSWindows. Maybe this is treated as a security measure.

StefanS
  • 1,089
  • 1
  • 11
  • 38