示例#1
0
        /// <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);
            }
        }
示例#2
0
        /// <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());
        }