static void PrintVisibleWindowHandles(IntPtr hwnd, int maxLevel = -1, int level = 0) { bool isVisible = Win32Wrapper.IsWindowVisible(hwnd); if (isVisible && (maxLevel == -1 || level <= maxLevel)) { StringBuilder className = new StringBuilder(256); Win32Wrapper.GetClassName(hwnd, className, className.Capacity); StringBuilder windowTitle = new StringBuilder(256); Win32Wrapper.GetWindowText(hwnd, windowTitle, className.Capacity); Console.WriteLine("".PadLeft(level * 2) + "0x{0:X8} \"{1}\" {2}", hwnd.ToInt64(), windowTitle, className); level++; // Enumerates all child windows of the current window Win32Wrapper.EnumChildWindows(hwnd, new Win32Wrapper.EnumWindowsProc((childhandle, childparamhandle) => { PrintVisibleWindowHandles(childhandle, maxLevel, level); return(true); }), IntPtr.Zero); } }