/// <summary> /// 获取顶层窗体(直到获取到为止) /// </summary> /// <param name="className"></param> /// <returns></returns> private int GetTopHwnd(GetHwndConfig hwndConfig) { int currenHwnd = 0; do { currenHwnd = GetHwndInfor.FindTopForm(hwndConfig.TopFromClassName, null); Thread.Sleep(1000); } while (currenHwnd == 0); for (int arrIndex = hwndConfig.LevelIndex.Count; arrIndex > 0; arrIndex--) { int indexCount = hwndConfig.LevelIndex[arrIndex - 1]; if (indexCount != 0) { for (int index = 0; index < (indexCount - 1); index++) { currenHwnd = GetHwndInfor.GetWindow(currenHwnd, GetWindowFlagEnum.GetNextHwnd); } } if (arrIndex > 1) { currenHwnd = GetHwndInfor.GetWindow(currenHwnd, GetWindowFlagEnum.GetChildFirstHwnd); } } addLoog("定位句柄位置成功"); return(currenHwnd); }
public int GetHwndLevelIndex(int hwnd) { int currHwndObjec = GetHwndInfor.GetWindow(hwnd, GetWindowFlagEnum.GetFirstHwnd); int endHwndObject = GetHwndInfor.GetWindow(hwnd, GetWindowFlagEnum.GetLastHwnd); int index = 1; if (currHwndObjec != hwnd) { do { currHwndObjec = GetHwndInfor.GetWindow(currHwndObjec, GetWindowFlagEnum.GetNextHwnd); if (currHwndObjec == 0 && currHwndObjec == endHwndObject) { index = 0; break; } index++; } while (currHwndObjec != hwnd); } return(index); }
public List <int> GetHwndPath(int hwnd) { List <int> PathLis = new List <int>(); int rootHwnd = GetHwndInfor.GetWindow(hwnd, GetWindowFlagEnum.GetTopHwnd); GetHwndConfig hwndConfig = new GetHwndConfig(rootHwnd); //int tempHwnd = hwnd; PathLis.Add(hwnd); hwndConfig.LevelIndex.Add(GetHwndLevelIndex(hwnd)); do { hwnd = GetHwndInfor.GetWindow(hwnd, GetWindowFlagEnum.GetParentHwnd); PathLis.Add(hwnd); if (hwnd == 0) { MessageBox.Show("啊找到最顶层了,出问题了。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); break; } else { if (hwnd == rootHwnd) { hwndConfig.LevelIndex.Add(0); } else { hwndConfig.LevelIndex.Add(GetHwndLevelIndex(hwnd)); } } }while (rootHwnd != hwnd); this.txtHwndConfig.Text = JsonConvert.SerializeObject(hwndConfig); return(PathLis); }