在Windows10中,可以使用WPF代码获取当前正在运行的程序的所有窗口,包括非顶层窗口。以下是一种实现方法:
首先,需要引用System.Diagnostics和System.Runtime.InteropServices命名空间。
然后,可以使用以下代码获取当前正在运行的程序的所有窗口:
using System.Diagnostics;
using System.Runtime.InteropServices;
public class WindowHelper
{
[DllImport("user32.dll")]
private static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam);
[DllImport("user32.dll")]
private static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll")]
private static extern int GetWindowTextLength(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
[DllImport("user32.dll")]
private static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
private delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
public static List<WindowInfo> GetAllWindows()
{
List<WindowInfo> windows = new List<WindowInfo>();
EnumWindows((hWnd, lParam) =>
{
if (IsWindowVisible(hWnd))
{
int length = GetWindowTextLength(hWnd);
if (length > 0)
{
StringBuilder sb = new StringBuilder(length + 1);
GetWindowText(hWnd, sb, sb.Capacity);
RECT rect;
GetWindowRect(hWnd, out rect);
windows.Add(new WindowInfo
{
Handle = hWnd,
Title = sb.ToString(),
Left = rect.Left,
Top = rect.Top,
Width = rect.Right - rect.Left,
Height = rect.Bottom - rect.Top
});
}
}
return true;
}, IntPtr.Zero);
return windows;
}
}
public class WindowInfo
{
public IntPtr Handle { get; set; }
public string Title { get; set; }
public int Left { get; set; }
public int Top { get; set; }
public int Width { get; set; }
public int Height { get; set; }
}
使用示例:
List<WindowInfo> windows = WindowHelper.GetAllWindows();
foreach (WindowInfo window in windows)
{
Console.WriteLine("Title: " + window.Title);
Console.WriteLine("Handle: " + window.Handle);
Console.WriteLine("Position: " + window.Left + ", " + window.Top);
Console.WriteLine("Size: " + window.Width + " x " + window.Height);
Console.WriteLine();
}
这段代码将获取当前正在运行的程序的所有窗口,并输出窗口的标题、句柄、位置和大小等信息。
请注意,这只是一种实现方法,可能还有其他方法可以达到相同的效果。此外,这段代码只适用于Windows平台,并且需要以管理员权限运行才能获取所有窗口的信息。
对于WPF开发,可以使用此方法获取当前正在运行的程序的所有窗口,并根据需要进行进一步的处理和操作。
领取专属 10元无门槛券
手把手带您无忧上云