当前位置:编程学习 > C#/ASP.NET >>

C#如何实现在其他程序窗口中移动点击呢?

已利用系统API正确获取到窗口句柄,如何在窗口中移动鼠标,并实现点击呢? 
我现在获取到窗口的坐标需要窗口,要操作的窗口必须在最前端显示吗?还是要用快捷键操作?
求高手指点下,刚接触到句柄,谢谢! api c# 句柄 --------------------编程问答-------------------- 发送消息,WM_LBUTTONDOWN --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
发送消息,WM_LBUTTONDOWN

谢谢回复
我用SendMessage(btnHwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(3, 3));
试着去点击一个按钮但是没反应啊?
已经正确获取到句柄. --------------------编程问答--------------------
引用 2 楼 u010835229 的回复:
Quote: 引用 1 楼 caozhy 的回复:

发送消息,WM_LBUTTONDOWN

谢谢回复
我用SendMessage(btnHwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(3, 3));
试着去点击一个按钮但是没反应啊?
已经正确获取到句柄.

你打开SPY++,然后找到这个窗口,监听消息,过滤设置中把Mouse Messages以外的去掉。

拦截下,看看你的Handle Message LParam WParam是否都正确。 --------------------编程问答-------------------- SendMessage是模拟点击,看不见鼠标的动作,只看到点击的效果。
要模拟鼠标点击需要发送2个消息,按下和抬起(如有不当之处,欢迎拍砖)。
const int WM_LBUTTONDOWN= 0x201;
const int WM_LBUTTONUP= 0x202;
SendMessage(btnHwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(3, 3));
SendMessage(btnHwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(3, 3)); --------------------编程问答--------------------
引用 3 楼 caozhy 的回复:
Quote: 引用 2 楼 u010835229 的回复:

Quote: 引用 1 楼 caozhy 的回复:

发送消息,WM_LBUTTONDOWN

谢谢回复
我用SendMessage(btnHwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(3, 3));
试着去点击一个按钮但是没反应啊?
已经正确获取到句柄.

你打开SPY++,然后找到这个窗口,监听消息,过滤设置中把Mouse Messages以外的去掉。

拦截下,看看你的Handle Message LParam WParam是否都正确。

谢谢,我原来少了这一行:

SendMessage(btnHwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(3, 3));

现在加上后可以监听到消息,我监听的这个button是我这个测试程序上的一个button,这样可以监听到.
但是向别的程序窗口SendMessage还是没反应,也监听不到消息.句柄获取无误,MessageBox.Show跟SPY++获取的一样,同样也是监听的button,但就是没反应.求继续帮助 --------------------编程问答--------------------
引用 4 楼 u011303459 的回复:
SendMessage是模拟点击,看不见鼠标的动作,只看到点击的效果。
要模拟鼠标点击需要发送2个消息,按下和抬起(如有不当之处,欢迎拍砖)。
const int WM_LBUTTONDOWN= 0x201;
const int WM_LBUTTONUP= 0x202;
SendMessage(btnHwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(3, 3));
SendMessage(btnHwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(3, 3));

谢谢,我确实没添加WM_LBUTTONUP这一行,现在加上后可以向此程序上的另外一个button SendMessage了,但是向其他程序SendMessage还是没反应,包括我自己另外写的一个用来测试的程序,只有一个button.不知何故.继续求解,谢谢谢谢! --------------------编程问答-------------------- 我写的代码

        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
        private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
        [DllImport("user32.dll", EntryPoint = "SendMessage")]
        private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
        int WM_CLICK = 0x00F5;
        const int WM_LBUTTONDOWN = 0x0201;
        const int WM_LBUTTONUP = 0x202;
        const int MK_LBUTTON = 0x0010;
        const int MK_RBUTTON = 0x0002;
-------------------------------------------------------------------------------
        private void button6_Click(object sender, EventArgs e)
        {
            //这些用spy++可以看到
            string lpszParentClass = null; //整个窗口的类名
            string lpszParentWindow = "测试一下点击"; //窗口标题
            string lpszClass_Submit = null; //需要查找的Button的类名
            string lpszName_Submit = "button3"; //需要查找的Button的标题

            IntPtr ParenthWnd = new IntPtr(0);
            IntPtr SonHwnd = new IntPtr(0);
            IntPtr SunHwnd = new IntPtr(0);

            //查到窗体,得到整个窗体 
            ParenthWnd = FindWindow(lpszParentClass, lpszParentWindow);
            MessageBox.Show(ParenthWnd.ToString());
            //得到二级子窗体
            SonHwnd = FindWindowEx(ParenthWnd, SonHwnd, lpszClass_Submit, lpszName_Submit);
            MessageBox.Show(SonHwnd.ToString());
            SendMessage(SonHwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(3, 3));
            SendMessage(SonHwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(3, 3));
        }

求指导.. --------------------编程问答-------------------- 关注中.. --------------------编程问答-------------------- 谢谢:
我写的另外一个用于测试的程序的button在没有被其他程序遮盖或者没有最小化的时候点击有反应了..不知何故.SendMessage不能用于后台操作吗?如果我想后台操作该如何实现呢?

另外控制其他程序的非button句柄还是没有反应(后台原因?).头大中! --------------------编程问答-------------------- --------------------编程问答-------------------- 第三个参数改成0试试
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,