Exemple #1
0
        /// <summary>
        /// WindowとCmdを渡して、Cmdに当てはまるWindowと、そのRECTとTextを返す
        /// </summary>
        /// <param name="hWnd"></param>
        /// <param name="cmd">API.GETWINDOW_CMD</param>
        /// <returns></returns>
        private (IntPtr, API.RECT, string) GetWindowEx(IntPtr hWnd, API.GETWINDOW_CMD cmd)
        {
            var    str = new StringBuilder(65535);
            IntPtr hh  = API.GetWindow(hWnd, cmd);

            _ = API.GetWindowText(hh, str, 65535);
            API.GetWindowRect(hh, out API.RECT re);
            return(hh, re, str.ToString());
        }
Exemple #2
0
        //指定したAPI.GETWINDOW_CMDを収集
        private List <IntPtr> GetCmdWindows
            (IntPtr hWnd, API.GETWINDOW_CMD cmd, int loopCount)
        {
            List <IntPtr> v    = new();
            IntPtr        temp = API.GetWindow(hWnd, cmd);

            for (int i = 0; i < loopCount; i++)
            {
                v.Add(temp);
                temp = API.GetWindow(temp, cmd);
            }
            return(v);
        }
Exemple #3
0
        private List <IntPtr> GetWindowsNextOrPrev(IntPtr hWnd, API.GETWINDOW_CMD cmd)
        {
            List <IntPtr> ptrs = new();
            IntPtr        temp = hWnd;

            do
            {
                ptrs.Add(temp);
                temp = API.GetWindow(temp, cmd);
            } while (temp != IntPtr.Zero);

            return(ptrs);
        }
Exemple #4
0
        private List <API.RECT> GetWindowRects(IntPtr hWnd, API.GETWINDOW_CMD cmd)
        {
            List <API.RECT> reList = new();
            IntPtr          temp   = API.GetWindow(hWnd, cmd);

            while (temp != IntPtr.Zero || reList.Count < 20)
            {
                API.GetWindowRect(temp, out API.RECT re);
                reList.Add(re);
                temp = API.GetWindow(temp, cmd);
            }
            return(reList);
        }
Exemple #5
0
        private (List <string>, List <API.RECT>) GetPrevWindowTextAndRects(IntPtr hWnd)
        {
            List <string>   strList = new();
            List <API.RECT> reList  = new();

            API.GETWINDOW_CMD cmd = API.GETWINDOW_CMD.GW_HWNDPREV;

            IntPtr        temp = API.GetWindow(hWnd, cmd);
            StringBuilder text = new StringBuilder(65535);

            while (temp != IntPtr.Zero || strList.Count < 20)
            {
                API.GetWindowRect(temp, out API.RECT re);
                API.GetWindowText(temp, text, 65535);
                strList.Add(text.ToString());
                reList.Add(re);
                temp = API.GetWindow(temp, cmd);
            }
            return(strList, reList);
        }
Exemple #6
0
        //同じOwnerWindowを持つWindow全部取得、これだと通常アプリの右クリックメニューは取得できない
        private (List <IntPtr> ptrs, List <API.RECT> rects, List <string> strs) GetWindowsWithSameOwner(IntPtr hWnd, IntPtr owner, API.GETWINDOW_CMD cmd)
        {
            List <IntPtr>   ptrs  = new();
            List <API.RECT> rects = new();
            List <string>   strs  = new();
            var             hWnds = GetWindowsNextOrPrev(hWnd, cmd);

            foreach (var item in hWnds)
            {
                var temp = GetOwner(item);
                if (temp.ptr == owner)
                {
                    ptrs.Add(item);
                    rects.Add(GetWindowRect(item));
                    strs.Add(GetWindowText(item));
                }
            }
            return(ptrs, rects, strs);
        }
Exemple #7
0
        /// <summary>
        /// Popup属性を持つWindow全部取得
        /// </summary>
        /// <param name="hWnd"></param>
        /// <param name="cmd">Next or Prev</param>
        /// <returns></returns>
        private (List <IntPtr> ptrs, List <API.RECT> rects, List <string> strs) GetPopupWindows(IntPtr hWnd, API.GETWINDOW_CMD cmd)
        {
            List <IntPtr>   ptrs  = new();
            List <API.RECT> rects = new();
            List <string>   strs  = new();
            var             hWnds = GetWindowsNextOrPrev(hWnd, cmd);

            foreach (var item in hWnds)
            {
                if (IsPopupWindow(item))
                {
                    ptrs.Add(item);
                    rects.Add(GetWindowRect(item));
                    strs.Add(GetWindowText(item));
                }
            }
            return(ptrs, rects, strs);
        }