tags:

views:

238

answers:

2

I'm new to Cocoa and I want to know how I can get a list of all open windows. I'm not talking about running programs, since this would be an easy task. I want to list windows, for example, if I have Preview running with 10 pdf opened, my program should be able to retrieve a list with all those pdf. I also want to know if there's some API available to interact with already open windows (and maybe move them or do something else) from an external application. Thank you.

+1  A: 

First, Cocoa is not an acronym, so it's not "COCOA". :-)

Second, your only (public API) option is the Accessibility API. You'll have to enable access for assistive devices in the Accessibility panel in Systems Preferences.

Take a look at the docs to get started: Accessibilty Overview

Joshua Nozzi
Changed it to "Cocoa" :-)I will take a look at the Accessibility API, I hope I will find everything i need. Thank you.
Raffo
+1  A: 

I have Preview running with 10 pdf opened, my program should be able to retrieve a list with all those pdf.

Well, that's the hard part. You can get the windows via Accessibility, but Accessibility doesn't associate them with any kind of document object.

AppleScript would work for some applications, but Preview isn't one of them. Indeed, most apps aren't.

So, you can get a list of windows easily enough, but getting meaningful information about or from inside those windows ranges from tricky to impossible. Your best bet may be a combination of Accessibility, AppleScript, and bug reports for un-scriptable applications, and the knowledge that your app will not work on everything.

Peter Hosey
So the think is harder than I thought... But maybe if I just could get the window title I could have the filename, but this is not obvious and could not be useful at all.
Raffo
Yeah, because the filename alone doesn't tell you *where* it is, and many different files may have the same name; and because the user may have multiple files with the same name open, leaving you with no way to tell which window identifies which file.
Peter Hosey