Mac / Cocoa - Getting a list of windows using Accessibility API

后端 未结 4 758
情歌与酒
情歌与酒 2020-11-30 07:02

I want to use the Accessibility API to get a list of all windows for a given application (external).

The goal is to check if a certain window is open. First I chec

4条回答
  •  一整个雨季
    2020-11-30 07:48

    I don't know a way to get window ID and PID from the Accessibility API.
    The NSWindow method Laurent mentioned only provides Window IDs but not the PID of the window owning application.
    I would use the CGWindowList methods that are available since 10.5.
    To get a list of window IDs and the PID of the owner you can try the following:

    CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
    for (NSMutableDictionary* entry in (NSArray*)windowList) 
    {
        NSString* ownerName = [entry objectForKey:(id)kCGWindowOwnerName];
        NSInteger ownerPID = [[entry objectForKey:(id)kCGWindowOwnerPID] integerValue];
        NSLog(@"%@:%d", ownerName, ownerPID);
    }
    CFRelease(windowList);  
    

    You can control if you want all windows (including offscreen, ...) with the option paramter.
    Also the entry objects contain a lot more information. Documentation link

提交回复
热议问题