首页新闻找找看学习计划

小白求教!!调用一次mouse_event方法模拟鼠标单击未实现效果(C#)

0
悬赏园豆:100 [已解决问题] 解决于 2015-11-19 12:07

最近需要做一个模拟鼠标自动点击按钮的东东,根据广大网友的推荐,于是乎我在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的时候才会有效果......

菜鸟一枚,着实不懂了,还请各位不吝赐教!给小白讲讲这是为什么啊......

笨nora的主页 笨nora | 初学一级 | 园豆:71
提问于:2015-10-20 16:48
< >
分享
最佳答案
0

折腾了好久的问题终于找到原因了,鼠标按下和抬起事件之间,需要先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);

笨nora | 初学一级 |园豆:71 | 2015-11-19 12:06
其他回答(3)
0

那你要把相关代码贴出来啊。

收获园豆:30
Firen | 园豆:5483 (大侠五级) | 2015-10-20 17:26

上面贴的就是核心部分的代码啊。。。

支持(0) 反对(0) 笨nora | 园豆:71 (初学一级) | 2015-10-21 16:00
0

第一次没有效果,有可能是那个窗体没有获得焦点。

收获园豆:30
何德海 | 园豆:435 (菜鸟二级) | 2015-10-20 20:58

是要用GetFocus之类的,还是SetForegroundWindow?后者试过了,也没有用。。

支持(0) 反对(0) 笨nora | 园豆:71 (初学一级) | 2015-10-21 16:02
0

也可能是第三方的程序窗体没有获取焦点,第一次单击时是激活窗体,第二次才是单击按钮?

收获园豆:40
JackWang-CUMT | 园豆:2826 (老鸟四级) | 2015-10-21 10:47

也许是吧,先试试看激活窗体或者get焦点之类的方法,多谢~

支持(0) 反对(0) 笨nora | 园豆:71 (初学一级) | 2015-10-21 16:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册