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 check that the application is running (using [NSWorkspace runningApplications] and checking each one), and then I want to check the title bar text of each window that is open for that application.
PS
So I can create an element for the app using the PID:
AXUIElementRef app = AXUIElementCreateApplication(pid);
but what do I do with it? Am I even going in the right direction? Can't beleive it's so hard to find examples on this.
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:
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
Use
AXUIElementCopyAttributeValues
to copy the value forkAXWindowsAttribute
, which should be an array of AXUIElement objects representing the application's windows.As you can guess from its function name, it follows the copy rule.
You can use windowNumbersWithOptions:. It lists all the windows from all the applications by their number. But I can't find how to get a NSWindow from a window number...