title

author

date

CreateTime

categories


WPF 获取应用的所有窗口



lindexi



2019-02-11 08:55:31 +0800



2019-02-11 08:55:31 +0800



WPF


本文告诉大家如何获取应用内的所有窗口,无论这些窗口有没显示

在 WPF 可以通过 Application.Current.Windows 列举应用的所有窗口




foreach(Window window in Application.Current.Windows ) 
{
Console.WriteLine(window.Title);
}



如果需要获取一个线程的窗口,请看代码




delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);

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

static IEnumerable<IntPtr> EnumerateProcessWindowHandles(Process process)
{
var handleList = new List<IntPtr>();

foreach (ProcessThread thread in process.Threads)
{
EnumThreadWindows(thread.Id,
(hWnd, lParam) => { handleList.Add(hWnd); return true; }, IntPtr.Zero);
}

return handleList;
}



​WPF 一个空的 WPF 程序有多少个窗口​

​WPF 内部的5个窗口之 MediaContextNotificationWindow ​