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