gyy444 发表于 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的实现方法不一样?):face (36):

请高手给个思路,先谢过了。

顽固不化 发表于 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

pusofalse 发表于 2009-12-15 01:01:57

这类的大型游戏都有防外挂机制的,楼主需要的是“驱动级模拟”。在用户态下的鼠标、键盘模拟很容易被屏蔽的。搜索论坛或者GOOGLE会得到“驱动级模拟”的相关信息。

gyy444 发表于 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)

okbb 发表于 2010-1-12 21:38:04

这样的,用controlsend可以实现,但是前提是窗口要能看得见,前台不前台没关系.只要你要点的位置,不要让基它窗口挡住就行,.

真会走路的废柴 发表于 2010-7-12 11:45:49

用内存来移动呢 ?
CTM机制
ClickToMove
页: [1]
查看完整版本: 魔兽世界用后台鼠标 为什么移动消息会失灵?