Ejemplo n.º 1
0
        public WinTree GetWindowTree()
        {
            List <IntPtr> listWinHwnd = new List <IntPtr>();

            WinAPI.EnumWindows(new WinAPI.EnumWindowsProc((hWnd, lParam) =>
            {
                uint pid = 0;
                WinAPI.GetWindowThreadProcessId(hWnd, out pid);

                if (pid == _process.Id)
                {
                    listWinHwnd.Add(hWnd);
                }

                return(true);
            }),
                               (IntPtr)0);

            WinTree root = new WinTree(IntPtr.Zero);

            foreach (IntPtr hWnd in listWinHwnd)
            {
                root.subWin.Add(new WinTree(hWnd));

                WinAPI.EnumChildWindows(hWnd,
                                        new WinAPI.EnumWindowsProc((hChildWnd, lParam) =>
                {
                    IntPtr parenthWind = WinAPI.GetParent(hChildWnd);
                    root.Find(parenthWind).subWin.Add(new WinTree(hChildWnd));
                    return(true);
                }),
                                        0);
            }

            return(root);
        }