コード例 #1
0
 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);
 }
コード例 #2
0
        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();
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }