private static bool EnumChildProc(int hwnd, IntPtr lParam) { if (lParam != IntPtr.Zero) { ETWP_Param param = (ETWP_Param)GCHandle.FromIntPtr(lParam).Target; param.m_parent.m_childList.Add(new Window(hwnd, param.m_parent, param.m_nThreadID)); return(true); } return(false); }
private void GetChildWindows() { WinAPI.EnumWindowsProc ecwp = new WinAPI.EnumWindowsProc(EnumChildProc); ETWP_Param lParam = new ETWP_Param(); lParam.m_parent = this; lParam.m_nThreadID = m_nThreadID; GCHandle gch = GCHandle.Alloc(lParam); WinAPI.EnumChildWindows(m_hWnd, ecwp, GCHandle.ToIntPtr(gch)); gch.Free(); }
private static bool EnumThreadWndProc(int hwnd, IntPtr lParam) { if (lParam != IntPtr.Zero) { ETWP_Param param = (ETWP_Param)GCHandle.FromIntPtr(lParam).Target; if (param.m_hAppMainWnd != 0 && param.m_hAppMainWnd == hwnd) { param.m_windowList.Insert(0, new Window(hwnd, null, param.m_nThreadID)); } else { param.m_windowList.Add(new Window(hwnd, null, param.m_nThreadID)); } return(true); } return(false); }
public static List <Window> GetProcessWindows(Process process) { WinAPI.EnumWindowsProc etwp = new WinAPI.EnumWindowsProc(EnumThreadWndProc); ETWP_Param lParam = new ETWP_Param(); lParam.m_hAppMainWnd = (int)process.MainWindowHandle; lParam.m_windowList = new List <Window>(); GCHandle gch = GCHandle.Alloc(lParam); RestoreWindow(lParam.m_hAppMainWnd); foreach (ProcessThread thread in process.Threads) { lParam.m_nThreadID = thread.Id; WinAPI.EnumThreadWindows(thread.Id, etwp, GCHandle.ToIntPtr(gch)); } gch.Free(); GenerateHierarchicalIDs(lParam.m_windowList); return(lParam.m_windowList); }