예제 #1
0
        internal void ShowWindows()
        {
            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);
                    WinAPI.ShowWindow(hWnd, WinAPI.WindowShowCmd.SW_SHOWNORMAL);
                }

                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) =>
                {
                    WinAPI.ShowWindow(hChildWnd, WinAPI.WindowShowCmd.SW_SHOWNORMAL);
                    return(true);
                }),
                                        0);
            }
        }
예제 #2
0
        //public Window FindWindowContains(string winText)
        //{
        //    try
        //    {

        //        Window findWindow = null;

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

        //                if (pid != _process.Id)
        //                {
        //                    return true;
        //                }

        //                int length = WinAPI.GetWindowTextLength(hWnd);
        //                StringBuilder windowName = new StringBuilder(length + 1);
        //                WinAPI.GetWindowText(hWnd, windowName, windowName.Capacity);

        //                if (windowName.ToString().Replace("&", "").Contains(findName))
        //                {
        //                    findWindow = (Window)Activator.CreateInstance(typeof(Window), hWnd, findName);
        //                    return false;
        //                }

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

        //            if (findWindow != null)
        //            {
        //                return true;
        //            }

        //            return false;
        //        },
        //                   winText,
        //                   60);

        //        Log.INFO(string.Format("Finded Winow:[{0},{1}], in PID:[{2}]", winText, findWindow.hwnd.ToString("X8"), _process.Id.ToString("X8")));
        //        return findWindow;
        //    }
        //    catch (Exception e)
        //    {
        //        throw new ArgumentException(string.Format("can not find window:[{0}] in PID:[{1}]", winText, _process.Id.ToString("X8")));
        //    }
        //}

        public Window TryFindWindow(string winText)
        {
            try
            {
                Window findWindow = null;

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

                        if (pid != _process.Id)
                        {
                            return(true);
                        }

                        int length = WinAPI.GetWindowTextLength(hWnd);
                        StringBuilder windowName = new StringBuilder(length + 1);
                        WinAPI.GetWindowText(hWnd, windowName, windowName.Capacity);

                        if (windowName.ToString().Replace("&", "") == findName)
                        {
                            findWindow = (Window)Activator.CreateInstance(typeof(Window), hWnd, findName);
                            return(false);
                        }

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

                    if (findWindow != null)
                    {
                        return(true);
                    }

                    return(false);
                },
                          winText,
                          5);

                Log.INFO(string.Format("Finded Winow:[{0},{1}], in PID:[{2}]", winText, findWindow.hwnd.ToString("X8"), _process.Id.ToString("X8")));
                return(findWindow);
            }
            catch (Exception e)
            {
                return(null);
            }
        }
예제 #3
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);
        }