[NSWorkspace runningApplications]
This returns all the user applications in a NSArray
as instances of NSRunningApplication
which has a property processIdentifier
.
Or you can use runningApplicationWithProcessIdentifier:
directly to get the application with a specified PID.
Here is the sample code: http://developer.apple.com/library/Mac/#samplecode/AppList/Introduction/Intro.html
Through the activationPolicy
property of the NSRunningApplication
you could get the Windowed state. I modified the AppList
code to make it show only the windowed applications as shown below. This matches what the activity monitor shows.

In particular, you are looking for the NSApplicationActivationPolicyRegular
.
Note the restrictions however. This only works for user owned processes.
All other methods are deprecated and may not work in future. Methods like GetBSDProcessList
and Carbon's GetProcessInformation
are not recommended anymore.