C#用mouse_event模拟鼠标的点击的问题

我用C#用mouse_event模拟鼠标的点击,我是用timer设定好固定时间在屏幕的某位置点吉的,可是在C#环境里调试时是没有问题的,即使窗体最小化了,也可以进行模拟鼠标点击,可是我单独运行EXE文件,在程序获得焦点时,mouse_event起作用,但一旦窗体失去焦点,只有那个setcurorpos的函数起作用,mouse_event点击的,就不起作用了,哪位兄弟帮帮忙解决一下这个问题?

第1个回答  2011-07-06
给你写了一个示例,你自己可以看明白的:

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_ABSOLUTE = &H8000 '指定鼠标使用绝对坐标系,此时,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
Private Const MOUSEEVENTF_MOVE = &H1 '移动鼠标
Private Const MOUSEEVENTF_LEFTDOWN = &H2 '模拟鼠标左键按下
Private Const MOUSEEVENTF_LEFTUP = &H4 '模拟鼠标左键抬起

Private Const SW = 1024
Private Const SH = 768

Private Sub Screen_Click(ByVal x As Long, ByVal y As Long)
mw = x / SW * 65535
mh = y / SH * 65535
mouse_event MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE, mw, mh, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub

Private Sub Command1_Click()
Screen_Click 512, 384 '点击Command1之后,模拟点击屏幕中间
End Sub

Private Sub Command2_Click()
Print Rnd
End Sub

Private Sub Form_Load()
Me.Height = Me.Width
Command2.Move (Me.ScaleWidth - Command2.Width) / 2, (Me.ScaleHeight - Command2.Height) / 2
End Sub
另外,站长团上有产品团购,便宜有保证
第2个回答  2011-07-02
你的问题描述有点问题
让人看的不是太懂
到底是窗体失去焦点后,再次点击不起作用
还是窗体失去焦点后,那个窗口的鼠标事件就不响应了?
如果是第二种,属于正常现象,也是必须现象,不然,你的焦点一直在那个窗体里真是个麻烦了
第一种的话,就有点问题了
一般出现这种情况的我知道的有几种情况
一是进程优先级太低,没抢上资源
二是窗体事件中加些代码,比如窗体最小化事件之类的
其他的就不太清楚了
第3个回答  2011-07-04
失去焦点了,程序就不能捕获事件了。你查查全局鼠标钩子的一些知识吧。本回答被网友采纳