首页 > 代码库 > c# 列举所有窗口和子窗口

c# 列举所有窗口和子窗口

private delegate bool WNDENUMPROC(IntPtr hWnd, int lParam);        [DllImport("user32.dll", ExactSpelling = true)]        private static extern bool EnumChildWindows(IntPtr hwndParent, WNDENUMPROC lpEnumFunc, int lParam);         [DllImport("user32.dll")]        private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, int lParam);        //[DllImport("user32.dll")]         //private static extern IntPtr FindWindowW(string lpClassName, string lpWindowName);         [DllImport("user32.dll")]        private static extern int GetWindowTextW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);        [DllImport("user32.dll")]        private static extern int GetClassNameW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);        public struct WindowInfo        {            public IntPtr hWnd;            public string szWindowName;            public string szClassName;        }        private List<WindowInfo> EnumChildWindowsCallback(IntPtr handle, string name, string classname)        {            List<WindowInfo> wndList = new List<WindowInfo>();            EnumChildWindows(handle,delegate(IntPtr hWnd, int lParam)            {                WindowInfo wnd = new WindowInfo();                StringBuilder sb = new StringBuilder(256);                //get hwnd                 wnd.hWnd = hWnd;                //get window name                 GetWindowTextW(hWnd, sb, sb.Capacity);                wnd.szWindowName = sb.ToString();                //get window class                 GetClassNameW(hWnd, sb, sb.Capacity);                wnd.szClassName = sb.ToString();                //add it into list                 wndList.Add(wnd);                return true;            },0);            return wndList.Where(it => it.szWindowName == name && it.szClassName == classname).ToList();        }         public List<WindowInfo> GetAllDesktopWindows(string name,string classname)        {            List<WindowInfo> wndList = new List<WindowInfo>();            //enum all desktop windows             EnumWindows(delegate(IntPtr hWnd, int lParam)            {                WindowInfo wnd = new WindowInfo();                StringBuilder sb = new StringBuilder(256);                //get hwnd                 wnd.hWnd = hWnd;                //get window name                 GetWindowTextW(hWnd, sb, sb.Capacity);                wnd.szWindowName = sb.ToString();                //get window class                 GetClassNameW(hWnd, sb, sb.Capacity);                wnd.szClassName = sb.ToString();                //add it into list                 wndList.Add(wnd);                return true;            }, 0);            return wndList.Where(it => it.szWindowName == name && it.szClassName ==classname ).ToList();        }