/// <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()); }
//指定した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); }
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); }
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); }
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); }
//同じ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); }
/// <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); }