C#如何实现在其他程序窗口中移动点击呢?
已利用系统API正确获取到窗口句柄,如何在窗口中移动鼠标,并实现点击呢?我现在获取到窗口的坐标需要窗口,要操作的窗口必须在最前端显示吗?还是要用快捷键操作?
求高手指点下,刚接触到句柄,谢谢! api c# 句柄 --------------------编程问答-------------------- 发送消息,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)); --------------------编程问答--------------------
发送消息,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,但就是没反应.求继续帮助 --------------------编程问答--------------------
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#