获取WPF过程中所有窗口的句柄

我知道我可以通过枚举Process.GetProcesses获取MainWindowHandle,但我也想获取WPF应用程序可能具有的所有WPF窗口的句柄。 我需要在完全独立的过程中做到这一点。 我将如何做到这一点? 谢谢


由于WPF进程有多个线程,你必须枚举所有线程来查找窗口。

我使用下面的Win32方法来做到这一点。 您创建一个列表并将其添加到每次迭代调用的回调列表中。

[DllImport("user32.dll")] 
public static extern bool EnumThreadWindows(int dwThreadId, EnumThreadWindowsCallBack lpfn, IntPtr lParam);

 Win32.EnumThreadWindows(processThread.Id, (hWnd, lParam) =>
                {
                    if (Win32.IsWindowVisible(hWnd))
                    {
                        Win32.RECT windowRect;
                        Win32.GetWindowRect(hWnd, out windowRect);

                        if (hWnd != _currentWindowHandle)
                        {
                            windowList.Add(new WindowInfo(hWnd, windowRect));
                        }
                    }
                    return true;
                }, IntPtr.Zero);
链接地址: http://www.djcxy.com/p/38845.html

上一篇: Get handles of all windows in a WPF process

下一篇: SetWindowPos not working for browsers