Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get handles to all windows of a process

Tags:

c#

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?

like image 626
RHicke Avatar asked Feb 10 '10 16:02

RHicke


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

like image 89
Cory Charlton Avatar answered Oct 01 '22 22:10

Cory Charlton


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.

like image 21
Hans Passant Avatar answered Oct 01 '22 23:10

Hans Passant


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.

like image 44
Rich Frank Avatar answered Oct 02 '22 00:10

Rich Frank