最近需要做一个模拟鼠标自动点击按钮的东东,根据广大网友的推荐,于是乎我在WinForm一个button的click事件中调用mouse_event方法想实现模拟鼠标左键单击。具体代码如下:
private void button1_Click(object sender, EventArgs e)
{
int x = 578;//屏幕坐标x
int y = 318;//屏幕坐标y
SetCursorPos(x, y);
mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero);
}
一开始,我让自己写的其他WinForm程序按钮置于待点击坐标处,点击button1,可以看到鼠标自动点击按钮的效果;但是,当待点击位置为第三方C++程序按钮时,第一次点击button1没有效果,第二次甚至更多次点击button1的时候才会有效果......
菜鸟一枚,着实不懂了,还请各位不吝赐教!给小白讲讲这是为什么啊......
折腾了好久的问题终于找到原因了,鼠标按下和抬起事件之间,需要先sleep一会儿,代码如下:
mouse_event((int)(MouseEventFlags.LeftDown), 0, 0, 0, IntPtr.Zero);
System.Threading.Thread.Sleep(100);
mouse_event((int)(MouseEventFlags.LeftUp), 0, 0, 0, IntPtr.Zero);
那你要把相关代码贴出来啊。
上面贴的就是核心部分的代码啊。。。
第一次没有效果,有可能是那个窗体没有获得焦点。
是要用GetFocus之类的,还是SetForegroundWindow?后者试过了,也没有用。。
也可能是第三方的程序窗体没有获取焦点,第一次单击时是激活窗体,第二次才是单击按钮?
也许是吧,先试试看激活窗体或者get焦点之类的方法,多谢~