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

SmartWorker 2013-08-25 08:50:28
已利用系统API正确获取到窗口句柄,如何在窗口中移动鼠标,并实现点击呢?
我现在获取到窗口的坐标需要窗口,要操作的窗口必须在最前端显示吗?还是要用快捷键操作?
求高手指点下,刚接触到句柄,谢谢!
...全文
425 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜鸟也编程 2013-08-29
  • 打赏
  • 举报
回复
第三个参数改成0试试
threenewbee 2013-08-26
  • 打赏
  • 举报
回复
引用 2 楼 u010835229 的回复:
[quote=引用 1 楼 caozhy 的回复:] 发送消息,WM_LBUTTONDOWN
谢谢回复 我用SendMessage(btnHwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(3, 3)); 试着去点击一个按钮但是没反应啊? 已经正确获取到句柄.[/quote] 你打开SPY++,然后找到这个窗口,监听消息,过滤设置中把Mouse Messages以外的去掉。 拦截下,看看你的Handle Message LParam WParam是否都正确。
SmartWorker 2013-08-26
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
发送消息,WM_LBUTTONDOWN
谢谢回复 我用SendMessage(btnHwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(3, 3)); 试着去点击一个按钮但是没反应啊? 已经正确获取到句柄.
feiniao19830822 2013-08-26
  • 打赏
  • 举报
回复
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));
SmartWorker 2013-08-26
  • 打赏
  • 举报
回复
SmartWorker 2013-08-26
  • 打赏
  • 举报
回复
谢谢: 我写的另外一个用于测试的程序的button在没有被其他程序遮盖或者没有最小化的时候点击有反应了..不知何故.SendMessage不能用于后台操作吗?如果我想后台操作该如何实现呢? 另外控制其他程序的非button句柄还是没有反应(后台原因?).头大中!
「已注销」 2013-08-26
  • 打赏
  • 举报
回复
关注中..
SmartWorker 2013-08-26
  • 打赏
  • 举报
回复
我写的代码

        [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));
        }
求指导..
SmartWorker 2013-08-26
  • 打赏
  • 举报
回复
引用 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.不知何故.继续求解,谢谢谢谢!
SmartWorker 2013-08-26
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
[quote=引用 2 楼 u010835229 的回复:] [quote=引用 1 楼 caozhy 的回复:] 发送消息,WM_LBUTTONDOWN
谢谢回复 我用SendMessage(btnHwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(3, 3)); 试着去点击一个按钮但是没反应啊? 已经正确获取到句柄.[/quote] 你打开SPY++,然后找到这个窗口,监听消息,过滤设置中把Mouse Messages以外的去掉。 拦截下,看看你的Handle Message LParam WParam是否都正确。[/quote] 谢谢,我原来少了这一行: SendMessage(btnHwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(3, 3)); 现在加上后可以监听到消息,我监听的这个button是我这个测试程序上的一个button,这样可以监听到. 但是向别的程序窗口SendMessage还是没反应,也监听不到消息.句柄获取无误,MessageBox.Show跟SPY++获取的一样,同样也是监听的button,但就是没反应.求继续帮助
threenewbee 2013-08-25
  • 打赏
  • 举报
回复
发送消息,WM_LBUTTONDOWN

110,578

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧