//功能核心函数,重点关注 void mouse_OnMouseActivity(object sender, MouseEventArgs e) { string str = "X:" + e.X + " Y:" + e.Y; int x = Cursor.Position.X; int y = Cursor.Position.Y; this.textBox1.Text = string.Format("({0},{1})", x, y); //得到窗口句柄 Point p = new Point(x, y); IntPtr formHandle = win32api.WindowFromPoint(p); IntPtr parent_handle = win32api.GetParent(formHandle); //确保获得顶级窗口。 while (parent_handle != IntPtr.Zero) { formHandle = parent_handle; parent_handle = win32api.GetParent(formHandle); } this.textBox2.Text = string.Format("parent_handle:{0}", formHandle.ToString()); StringBuilder title = new StringBuilder(256); //得到窗口的标题 win32api.GetWindowText(formHandle, title, title.Capacity); this.textBox3.Text = title.ToString(); if (e.Button == MouseButtons.Left) { wininfo win_info = new wininfo(); win_info.rect = get_window_rect(formHandle); win_info.wndhandle = formHandle; listBox1.Items.Add(string.Format("窗口名称:{0},left:{1,-5},right:{2,-5},top:{3,-5},bottom:{4,-5}", textBox3.Text, win_info.rect.Left, win_info.rect.Right, win_info.rect.Top, win_info.rect.Bottom)); bool have = false; //重复项判断 foreach (wininfo i in win_info_list) { if (i.wndhandle == formHandle) { have = true; break; } } //添加选择记录 if (!have) { //fullpath获得 uint num = 0; win32api.GetWindowThreadProcessId(win_info.wndhandle, ref num); win_info.fullname = get_fullpath(num); win_info_list.Add(win_info); textBox3.Text = win_info.fullname; } } }
//获得所有顶级窗口的 进程id,窗口进程,全路径名 private List <wininfo> get_top_win_info_way_2() { List <wininfo> path_list = new List <wininfo>(); //通过desktop窗口反向找的次级窗口为实际应用窗口的顶级窗口 //1、获取桌面窗口的句柄 IntPtr desktopPtr = win32api.GetDesktopWindow(); textBox1.Text = desktopPtr.ToString(); //2、获得一个子窗口(这通常是一个顶层窗口,当前活动的窗口) IntPtr winPtr = win32api.GetWindow(desktopPtr, 5); //3、循环取得桌面下的所有子窗口 List <IntPtr> winPtr_list = new List <IntPtr>(); while (winPtr != IntPtr.Zero) { if (win32api.IsWindowVisible(winPtr) && win32api.IsWindow(winPtr) && win32api.IsWindowEnabled(winPtr)) { uint num = 0; win32api.GetWindowThreadProcessId(winPtr, ref num); string a = string.Format("{0}", get_fullpath(num)); bool path_list_have_it = false; foreach (wininfo j in path_list) { if (j.fullname == a) { path_list_have_it = true; break; } } path_list_have_it = false; if (!path_list_have_it) { wininfo t = new wininfo(); t.fullname = a; t.wndhandle = winPtr; t.pid = (IntPtr)num; t.rect.Top = 0; t.rect.Bottom = 0; t.rect.Left = 0; t.rect.Right = 0; path_list.Add(t); } } //4、继续获取下一个子窗口 winPtr = win32api.GetWindow(winPtr, 2); } return(path_list); }
//获得所有的顶级窗口的全路径 public List <wininfo> get_top_win_info_way_1() { List <wininfo> path_list = new List <wininfo>(); hWnd_list.Clear(); WndEnumCallBack my_call_back = new WndEnumCallBack(my_call_back_function); win32api.EnumWindows(my_call_back, 0); foreach (IntPtr i in hWnd_list) { uint num = 0; win32api.GetWindowThreadProcessId(i, ref num); string a = string.Format("{0}", get_fullpath(num)); bool path_list_have_it = false; foreach (wininfo j in path_list) { if (j.fullname == a) { path_list_have_it = true; break; } } path_list_have_it = false; if (!path_list_have_it) { wininfo t = new wininfo(); t.fullname = a; t.wndhandle = i; t.pid = (IntPtr)num; t.rect.Top = 0; t.rect.Bottom = 0; t.rect.Left = 0; t.rect.Right = 0; path_list.Add(t); } } return(path_list); }
//功能核心函数,重点关注 void mouse_OnMouseActivity(object sender, MouseEventArgs e) { //获得当前鼠标位置 int x = Cursor.Position.X; int y = Cursor.Position.Y; //得到鼠标位置窗口句柄 Point p = new Point(x, y); IntPtr formHandle = win32api.WindowFromPoint(p); IntPtr parent_handle = win32api.GetParent(formHandle); //确保获得顶级窗口。 while (parent_handle != IntPtr.Zero) { formHandle = parent_handle; parent_handle = win32api.GetParent(formHandle); } //鼠标左键点击 if (e.Button == MouseButtons.Left) { ////得到窗口的标题 StringBuilder title = new StringBuilder(256); win32api.GetWindowText(formHandle, title, title.Capacity); string aaa = string.Format("handlw:{0} title:{1}", formHandle, title); treeView2.Nodes.Add(aaa); //窗口信息获得 wininfo win_info = new wininfo(); win_info.rect = get_window_rect(formHandle); win_info.wndhandle = formHandle; ////重复项判断 bool have = false; foreach (wininfo i in win_group.win_info_list) { if (i.wndhandle == formHandle) { have = true; break; } } ////添加选择记录 if (!have) { //fullpath获得 uint num = 0; win32api.GetWindowThreadProcessId(win_info.wndhandle, ref num); win_info.fullname = get_fullpath(num); win_info.pid = (IntPtr)num; win_group.win_info_list.Add(Clone <wininfo>(win_info)); fullpathname = win_info.fullname; treeView1.SelectedNode = CurrentNode; string ddd = string.Format("{0},{1}", num, fullpathname); treeView1.SelectedNode.Nodes.Add(fullpathname.Trim()); //treeView1.SelectedNode.Nodes.Add(ddd); } } }