Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get all opened desktop applications using WPF

Tags:

wpf

I am trying to create a Visual Tree Explorer application (like Snoop, Mole) which should automatically identify all desktop applications and detect whether it is a WPF app. or not. I am tring to do this in WPF. Is there any way to get all WPF opened applications. Any special API, or native functions in system dlls, etc.

Regards,

Jawahar

like image 390
Jawahar Avatar asked Feb 16 '26 13:02

Jawahar


1 Answers

I think you can iterate through the list of all processes and for those processes who have a window, check if the window class name starts with HwndWrapper (I've noticed the WPF windows have a class name like this: HwndWrapper[DefaultDomain;;2e60e21a-8752-4daf-820b-aed289668930])

The code should be something like this:

Process[] procs = Process.GetProcesses();
foreach(Process p in procs)
{
    if (p.MainWindowHandle != null)
    {
        Console.WriteLine(p.MainWindowTitle);
        StringBuilder sb = new StringBuilder(257);
        RealGetWindowClass(p.MainWindowHandle, sb, 256);
        Console.WriteLine(sb.ToString());
        if(sb.ToString().StartsWith("HwndWrapper"))
        {
            Console.WriteLine("WPF window");
        }
    }
}

[DllImport("user32.dll")]
static extern uint RealGetWindowClass(IntPtr hwnd, [Out] StringBuilder pszType, uint cchType);

with maybe some adjustments depending on your case. When dealing with such a window, one should assume it's a WPF window not take it for a certainty, so error checking must be extensive.

like image 131
Andrei Pana Avatar answered Feb 18 '26 09:02

Andrei Pana



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!