成都龙泉二中录取分:懂VB的高手请进

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 09:01:29
有没有人懂得VB程序中的模拟鼠标事件

本人有一个程序需要用到模拟鼠标时间API函数,但不是很明白,在网上找了很久也没有答案。

程序代码如下:
Private Sub Form_Load()
g_WindowHwnd = FindWindow(vbNullString, "MapleStory")
Sleep 5000
mouseClick 20, 620
Sleep 5000
Call keybd_event(1, 0, 0, 0)
For i = 1 To 10
mouseClick 380, 85
Call keybd_event(1, 0, 0, 0)
end sub

'方法:mouseClick(ByVal x As Long, ByVal y As Long)
'********************************************
Public Sub mouseClick(ByVal x As Long, ByVal y As Long)
Dim po As POINTAPI 'po点击前鼠标位置
Dim kX As Long '方块的绝对X坐标
Dim kY As Long '方块的绝对Y坐标
Dim winRECT As RECT '游戏窗口的RECT

'获得游戏窗口的RECT
GetWindowRect g_WindowHwnd, winRECT
'绝对坐标 = 游戏窗口左上角坐标 + 游戏中的相对坐标
'MsgBox "winRECT.Left:" + CStr(winRECT.Left) + "winRECT.Top:" + CStr(winRECT.Top)
kX = winRECT.Left + x
kY = winRECT.Top + y
'获得鼠标点击前位置
GetCursorPos po
'模拟鼠标移动
mouse_event MOUSEEVENTF_MOVE Or MOUSEEVENTF_ABSOLUTE, kX * 65535 / 1024, kY * 65535 / 768, 0&, 0&
'模拟鼠标按下弹起
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP Or MOUSEEVENTF_ABSOLUTE, 0, 0, 0&, 0&
'模拟鼠标按下弹起
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP Or MOUSEEVENTF_ABSOLUTE, 0, 0, 0&, 0&
'点击后返回原先位置
SetCursorPos po.x, po.y
End Sub

本事做过测试了,用在其他程序上(记事本、计算器、WORD……),都可以实现鼠标移动到位置并点击一次,唯独在冒险岛游戏登陆画面上,鼠标已经明明移动到了选择地图(风之大陆、光之大陆……那里),但是,就是没有点击成功,我在想是否是冒险岛屏蔽了所有模拟的鼠标事件?各位搞开发的大虾帮我看看还有什么办法可以解决这个问题,是否还有其他的方法可以实现鼠标点击一下(最主要的是冒险岛登陆那里能点击成功),我见过阻击手可以实现换频道,若鼠标事件被屏蔽阻击手又是如何可以实现的?

谢谢高手,请给我指点好吗?
回答出来再给200

在游戏里模仿鼠标点击,一定要把mousdown的事件多停留一段时间,这样才能有效的模仿鼠标点击事件。

在MouseDown事件后停留1秒或更长,然后再执行MouseUp事件试一试

这和电脑配置高低有关,也和运行的游戏有一些关系。

本人是这样认为的;VB的程序是:

请将你的mouse_event语句改为:

mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 '发送鼠标左健按下动作
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 '发送鼠标左健放开动作

这两条语句模拟一次鼠标单击动作.

请将你的mouse_event语句改为:

mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 '发送鼠标左健按下动作
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 '发送鼠标左健放开动作

这两条语句模拟一次鼠标单击动作.
^-^

现在好用了?

在游戏里模仿鼠标点击,一定要把mousdown的事件多停留一段时间,这样才能有效的模仿鼠标点击事件。

在MouseDown事件后停留1秒或更长,然后再执行MouseUp事件试一试

这和电脑配置高低有关,也和运行的游戏有一些关系

将你的mouse_event语句改为:

mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 '发送鼠标左健按下动作
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 '发送鼠标左健放开动作

这两条语句模拟一次鼠标单击动作.