vb中用sendmessage模拟鼠标的问题
代码如下:
SendMessage hwnd, WM_LBUTTONDOWN, 1, &HC00239
SendMessage hwnd, WM_LBUTTONUP, 0, &HC00239
可是在窗口里没有按你指定的坐标点击,而是鼠标在哪里在哪里点击不知道是什么原因啊。
用spy++测试了下,坐标是正确的啊。
但是有区别,这段是模拟的。
<00072> 00620674 S WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:569 yPos:192
<00073> 00620674 R WM_LBUTTONDOWN
<00074> 00620674 S WM_LBUTTONUP fwKeys:0000 xPos:569 yPos:192
<00075> 00620674 S WM_LBUTTONUP
这段是直接点击窗口里得到的
<00069> 00620674 P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:569 yPos:192
<00070> 00620674 P WM_LBUTTONUP fwKeys:0000 xPos:569 yPos:192
就是模拟的比正常点击的多了那么两行。而且不能在传递的值处点击鼠标,而是鼠标在哪里就点击。
简单的说就是模拟的时候传递的坐标没有作用。
谁能帮我解答下啊,谢谢了。
[解决办法]
1.使用API GetWindowRect 可以得知目标的XY与大小
2.模拟鼠标 建议你使用mouse_event
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Sub Command1_Click()
Dim Rec As RECT
GetWindowRect HwndVal, Rec
SetCursorPos Rec.Right - 40, Rec.Top + 15
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
[解决办法]
不能用mouse_event 啊,因为我要在敞口最小化的时候照样可以模拟啊。
mouse_event 好像是全局的吧,要不然就要再开个虚拟机啦。
[解决办法]
呵呵....那是不是思路改一下 If 最小化 Then 改为模拟键盘, 两者并用 ?
因为在 最小化时 模拟鼠标 没正确的座标让你 "点击" 啊
[解决办法]
我的坐标都是可以算出来的,所以就可以最小化时候用啊。
感觉不用判断了吧,sendmessage比mouse_event点吧~
就是做起来有点困难~
[解决办法]
呵呵...是有点麻烦
这个帖与你差不多,参考看吧
http://topic.csdn.net/u/20100128/23/5cbd3947-fc92-434b-868b-103e4576578b.html?41923
[解决办法]
只能在研究下了,哎~
[解决办法]
先用SetCursorPos 移动鼠标到要点击的位置,再点击
[解决办法]