Ejemplo n.º 1
0
        //功能核心函数,重点关注
        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;
                }
            }
        }
Ejemplo n.º 2
0
        //获得所有顶级窗口的 进程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);
        }
Ejemplo n.º 3
0
        //获得所有的顶级窗口的全路径
        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);
        }
Ejemplo n.º 4
0
        //功能核心函数,重点关注
        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);
                }
            }
        }