快请如来佛祖~~~,关于鼠标问题!
本人做一个游戏外挂(自己用的)
问题1 :
SetCurSorPos 函数 或者用MOUSE_EVENT 对这个游戏的进行模拟鼠标的操作
但是尽管 参数是一样的但是每次点到的地方总是不同
例如:
setcursorPos x,y '移到点击确定的位置
或者
mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, X, Y, 0, 0
结果鼠标落的地方总是不同
而且结果都用GetCurSorPos PP 进行检验;但是结果呢 PP.x,PP.y 都和上述位置相同
小弟感觉到已经黔驴技穷了,只好来到CSDN.net大呼一声:快请如来佛祖~~~。本人已经
搞不定了。
问题点数:50、回复次数:11Top
1 楼cpucontrol(可以包含)回复于 2004-12-02 02:12:09 得分 0
人都来了吗?Top
2 楼aohan(aohan)回复于 2004-12-02 08:06:45 得分 10
你怎么用的,该函数的声明是这样的
Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long
说明
设置指针的位置
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
x,y 鼠标指针在屏幕像素坐标系统中的X,Y位置
不知你想做什么Top
3 楼aohan(aohan)回复于 2004-12-02 08:10:11 得分 0
给个别人的东东
下面是子程序MoveCursorOn,它可让鼠标移动到指定控件上方。
下列代码请放在declarations段中:
Type
PoinTAPIx As Intege
ry As Integer
End Type
Declare Sub SetCursorPos Lib "User"(Byval x As Integer,Byval y As Integer)
Declare Sub ClientToScreen Lib "User"(Byval hwnd As Integer,IpPoint As PointAPI)
Declare Function GetParent Lib "User"(Byval hwnd As Integer)As Integer
然后建立一个新的子程序(ALT+N→N→键入子程序名MoveCursorOn),下面是子程序的代码:
Sub MoveCursorOn(source As Control)
Dim Pt As PoinTAPI
Dim hparent As Intege
rp.x=(Source.Left+Source.Width/2)/Screen.Twipsperpixel)
p.y=(Source.Top+Source.Height/2)/Screen.Twipsperpixel)
hparent=GetParent(source.hwnd)
ClientToScreen hparent ptSetCursorPos pt.x pt.y
End Sub
使用该子程序很容易,例如我们想把鼠标移动到按钮Command1上,就可使用语句Move Cursor On Command1
您会看到鼠标箭头已经指着按钮Command1。
需要说明的是,千万不要滥用该子程序。让鼠标自己满屏乱飞,我们的用户会感到失去对应用程序的控制,这是违反我们的初衷的。
在有数个输入框的窗口中(这在数据库应用程序中是很典型的),当用户完成第一个输入框的输入后,总爱? 性的加一个回车,希望输入焦点落到下一个输入框中(DOS中大多数应用程序是如此),可往往事与愿违,这一回车却触发了拥有Default特性的按钮,结果不是关闭了当前窗口就是又蹦出另一窗口。用户睁大眼睛看着屏幕,“咦?!我到底做了什么?”这是Windows新用户经常遇到的事情。
解决它其实很容易,只需在输入框的KeyPress事件中加入如下代码:
IF KeyASCII=13 ThenKeyASCII=0Sendkeys "{TAB}"END IF
这样,当用户在这个输入框中键入Enter时,就象键入TAB键时,焦点被移到下一控件上。但需注意,这种方法不适用于多行的TextBox,即TextBox的MultiLine特性设为True时,因为这时的回车键是起换行的作用。
Top
4 楼cpucontrol(可以包含)回复于 2004-12-02 18:38:59 得分 0
亲爱的各位高手们:
问题是这样的 在外挂中我们要把鼠标点到游戏的某处
例如:
Setcursorpos 90,90 '移动到点击确定的地方
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 '鼠标左键按下
这句话如果用在点击QQ这样软件上是行得通的 因为每次都能通过 setcursorpos 90,90 准确的移动到按键上
但是用在点击游戏里就不行 因为鼠标会漂移 每次Setcursorpos 90,90 都可能移动到不同的位置上
尽管Setcursorpos 是绝对屏幕坐标但是点到游戏里就会漂移
Top
5 楼WallesCai(女人之美,在于蠢得无怨无悔,男人之美,在于撒谎撒得白日见鬼)回复于 2004-12-02 18:42:54 得分 5
那也有可能是游戏用到的分辨率和你的桌面分辨率不同Top
6 楼cpucontrol(可以包含)回复于 2004-12-02 18:47:16 得分 0
分辨率不同不是问题因为:S
etcursorpos 是绝对屏幕坐标 就算游戏分辨率不同,按钮总不会跑吧 ,事实上它是不会动的,每次出来按键就在原地。而且,分辨率不管与屏幕相不相同都会鼠标总会漂移Top
7 楼qyii(劳心劳力)回复于 2004-12-05 12:38:21 得分 35
别在setcursorpos上浪费心机了...你的程序点不中是,这是游戏对抗外桂的手段!Top
8 楼creazyfish(梳分头的鱼)回复于 2004-12-05 23:03:31 得分 0
过来听课了Top
9 楼j_x_y(稀里糊涂)回复于 2004-12-06 15:58:41 得分 0
可能是游戏反作弊功能Top
10 楼cpucontrol(可以包含)回复于 2004-12-07 04:02:42 得分 0
有没有对策啊同志们。它抗难道我们就放弃吗?Top
11 楼ylsn2004(碧海青天)回复于 2004-12-07 07:23:02 得分 0
用不言败
帮楼主顶
学习Top




