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); }