找回密码
 加入
搜索
查看: 7990|回复: 5

魔兽世界用后台鼠标 为什么移动消息会失灵?

  [复制链接]
发表于 2009-12-14 18:37:07 | 显示全部楼层 |阅读模式
本帖最后由 gyy444 于 2009-12-15 00:50 编辑

想实现游戏指定坐标后台鼠标右键,_MouseClickPlus和_MouseClick都用过了,指定了窗口和坐标,但是只能点击鼠标当前坐标。表现出来就是鼠标移动到哪里,他就点到哪里。

函数里面用的是下面这个DllCall,感觉是WM_MOUSEMOVE消息到不了位置,WM_RBUTTONDOWN和WM_RBUTTONUP消息都正常。
不知道是游戏本身对这个有屏蔽还是。。。
DllCall("user32.dll", "LRESULT", "SendMessage", _
        "HWND",  $hWnd1, _
        "UINT",   0x200, _ ;WM_MOUSEMOVE
        "WPARAM",   0, _
        "LPARAM",  _MakeLong(500, 500))

后面换了MouseClick在前台操作鼠标,没有出现上面的问题,可以在”500,500“的位置按下右键。
MouseClick("right", 500, 500, 1)

昨天纠结了1晚上没搞清楚 前台可以实现的鼠标移动到 后台不起作用了(MouseClick的实现方法不一样?)

请高手给个思路,先谢过了。
发表于 2009-12-14 21:25:37 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 240, 35, 100, 100,BitOR($WS_MINIMIZEBOX,$WS_POPUP,$WS_GROUP,$WS_CLIPSIBLINGS))
$Label1 = GUICtrlCreateLabel("欢迎访问初级视编室", 5, 5,230 , 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
AdlibRegister("_mouseclk",2000)
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                case $Label1
                        ShellExecute("http://dvedit.5d6d.com/bbs.php")
        EndSwitch
WEnd

Func _mouseclk()
        AdlibunRegister("_mouseclk")
        MouseClick("left",150,115,1,0)
EndFunc
发表于 2009-12-15 01:01:57 | 显示全部楼层
这类的大型游戏都有防外挂机制的,楼主需要的是“驱动级模拟”。在用户态下的鼠标、键盘模拟很容易被屏蔽的。搜索论坛或者GOOGLE会得到“驱动级模拟”的相关信息。
 楼主| 发表于 2009-12-15 15:42:15 | 显示全部楼层
谢谢顽固的代码,这种方式是不是HOOK的?
我改了代码,在游戏里面试了下,还是那个老问题,鼠标移动到那里,他就点击那里,不点击指定坐标位置。

Func _mouseclk()
               
DllCall("user32.dll", "LRESULT", "SendMessage", _
        "HWND",  $hWnd1, _
        "UINT",   0x200, _   ;WM_MOUSEMOVE
        "WPARAM",   0, _
        "LPARAM",  _MakeLong(500, 500))
               
DllCall("user32.dll", "LRESULT", "SendMessage", _
        "HWND",  $hWnd1, _
        "UINT",   0x0204, _  ;WM_RBUTTONDOWN
        "WPARAM",   0x0002, _
        "LPARAM",  _MakeLong(500, 500))
        
DllCall("user32.dll", "LRESULT", "SendMessage", _
        "HWND",  $hWnd1, _
        "UINT",   0x0205, _  ;WM_RBUTTONUP
        "WPARAM",   0, _
        "LPARAM",  _MakeLong(500, 500))       

EndFunc
       
AdlibRegister("_mouseclk",1000)
发表于 2010-1-12 21:38:04 | 显示全部楼层
这样的,用controlsend可以实现,但是前提是窗口要能看得见,前台不前台没关系.只要你要点的位置,不要让基它窗口挡住就行,.
发表于 2010-7-12 11:45:49 | 显示全部楼层
用内存来移动呢 ?
CTM机制
ClickToMove
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-16 04:37 , Processed in 0.083249 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表