/// <summary> /// 根据桌面名称查询窗口列表 /// </summary> /// <param name="desktopName">桌面名称</param> /// <returns>窗口列表</returns> public static Window[] GetWindows(string desktopName) { var desktopHandle = Win32Api.OpenDesktop(desktopName, 0, true, WinStationAccess.GENERIC_ALL); if (desktopHandle == IntPtr.Zero) { throw new Win32ErrorCodeException("OpenDesktop('" + desktopName + "')"); } try { var windows = new List <Window>(); var callback = new Win32Api.EnumDesktopWindowsDelegate((hWnd, lParam) => { windows.Add(new Window(hWnd)); return(true); }); if (!Win32Api.EnumDesktopWindows(desktopHandle, callback, IntPtr.Zero)) { throw new Win32ErrorCodeException("EnumDesktopWindows('" + desktopName + "')"); } return(windows.ToArray()); } finally { Win32Api.CloseDesktop(desktopHandle); } }
/// <summary> /// 获取所有窗口列表 /// </summary> /// <returns>窗口列表</returns> public static WindowInfo[] GetWindows() { var windows = new List <WindowInfo>(); var callback = new Win32Api.EnumDesktopWindowsDelegate((hWnd, lParam) => { windows.Add(new WindowInfo(hWnd)); return(true); }); if (!Win32Api.EnumDesktopWindows(IntPtr.Zero, callback, IntPtr.Zero)) { throw new Win32ErrorCodeException("EnumDesktopWindows"); } return(windows.ToArray()); }