In C# using the process class I can get the handle to the Main Window of a process but I need access to a window that is not the main window of its process. How can I get the handle to all of the windows of a process?
3 Answers
The EnumChildWindows function might help you out. The child windows could also have children and so on.
There is also GetWindow and EnumThreadWindows

- 8,868
- 4
- 48
- 68
P/Invoking the EnumThreadWindows
function of user32, the callback you provide would be given the handles of the windows for a given thread. Process.GetCurrentProcess().Threads
should return to you all the relevant threads with which to call EnumThreadWindows
.

- 52,939
- 59
- 191
- 278

- 146
- 3
You can P/Invoke GetWindowThreadProcessId()
to get the thread ID for the UI thread that owns the main window. From there, you can find any other top-level window owned by that thread with EnumThreadWindows()
. Any child windows (controls) owned by a top-level window can be found with EnumChildWindows()
. Visit pinvoke.net for the necessary P/Invoke declarations.

- 7,479
- 3
- 37
- 69

- 922,412
- 146
- 1,693
- 2,536