首页 | 新闻资讯 | 软件应用 | 图形图像 | 网络应用 | 硬件学堂 | 程序开发 | 安全中心 | 素材下载 | 作者专区 | 学院论坛
精选专题 | 精美壁纸 | 专家答疑 | Flash剧场 | Photoshop | 名词解释 | 梦幻桌面 | PS高手进阶 | QQ区 | 图书 | 黑客教材
Flash教程| 卡通制作 | AutoCAD | 3DMax实例 | PS视频教程| 网页制作 | CorelDRAW| Firework | 滤镜与实例 | 全部视频教程
当前位置:eNet硅谷动力 > 学院频道 > VB

如何自动移动Mouse  
2004-03-10 01:38 来源:eNet论坛
【简 介】
看看就明白了!
    
加入收藏  设为首页

事实上是使用SetCursorPos()便可以了,而它的参数是对应於萤的座标,而不是对应某一个Window的Logic座标。这个例子中的MoveCursor()所传入的POINTAPI也是相对於萤屏的座标,指的是从点FromP移动到ToP。最後面我也付了Showje的文章,使用的方式全部不同,不管是他的或我的,都有一个地方要解决才能做为Mouse自动导引的程式,那就是Mouse在自动Move时,如何让使用者不能移动Mouse,而这个问题就要使用JournalPlayBack Hook,底下的程式中,使用 EnableHook, FreeHook,这两个函数是Copy自如何使键盘、Mouse失效 。

'以下程式在.bas
Type RECT
Left As Long
ToP As Long
Right As Long
Bottom As Long
End Type
Type POINTAPI
X As Long
Y As Long
End Type

Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Sub MoveCursor(FromP As POINTAPI, ToP As POINTAPI)
Dim stepx As Long, stepy As Long, k As Long
Dim i As Long, j As Long, sDelay As Long
stepx = 1
stepy = 1
i = (ToP.X - FromP.X)
If i < 0 Then stepx = -1
i = (ToP.Y - FromP.Y)
If i < 0 Then stepy = -1
'Call EnableHook '如果有Include htmapi53.htm的.bas时,会Disable Mouse
For i = FromP.X To ToP.X Step stepx
Call SetCursorPos(i, FromP.Y)
Sleep (1) '让Mouse 的移动慢一点,这样效果较好
Next i
For i = FromP.Y To ToP.Y Step stepy
Call SetCursorPos(ToP.X, i)
Sleep (1)
Next i
'Call FreeHook 'Enable Mouse
End Sub
'以下程式在Form中,需3个Command按键
Private Sub Command3_Click()
Dim rect5 As RECT
Dim p1 As POINTAPI, p2 As POINTAPI
Call GetWindowRect(Command1.hwnd, rect5) '取得Command1相对於Screen的座标
p1.X = (rect5.Left + rect5.Right) \ 2
p1.Y = (rect5.ToP + rect5.Bottom) \ 2
Call GetWindowRect(Command2.hwnd, rect5)
p2.X = (rect5.Left + rect5.Right) \ 2
p2.Y = (rect5.ToP + rect5.Bottom) \ 2

Call MoveCursor(p1, p2) 'Mouse由Command1 ->Command2
End Sub

另外从Showje的站有Copy以下的程式码,也是做相同的果,只是使用的API全部不同

'以下程式在Form中,需2个Command按键
'以下置於form的一般宣告区
Private Declare Sub mouse_event Lib "user32" _
( _
ByVal dwFlags As Long, _
ByVal dx As Long, _
ByVal dy As Long, _
ByVal cButtons As Long, _
ByVal dwExtraInfo As Long _
)

Private Declare Function ClientToScreen Lib "user32" _
( _
ByVal hwnd As Long, _
lpPoint As POINTAPI _
) As Long

Private Declare Function GetSystemMetrics Lib "user32" _
( _
ByVal nIndex As Long _
) As Long
Private Declare Function GetCursorPos Lib "user32" _
( _
lpPoint As POINTAPI _
) As Long


Private Type POINTAPI
x As Long
y As Long
End Type

Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type


Private Const MOUSEEVENTF_MOVE = amp;H1 ' mouse move
Private Const MOUSEEVENTF_LEFTDOWN = amp;H2 ' left button down
Private Const MOUSEEVENTF_LEFTUP = amp;H4 ' left button up
Private Const MOUSEEVENTF_ABSOLUTE = amp;H8000 ' absolute move


Private Sub Command1_Click()

Dim pt As POINTAPI
Dim dlamp;
Dim destxamp;, destyamp;, curxamp;, curyamp;
Dim distxamp;, distyamp;
Dim screenxamp;, screenyamp;
Dim finished%
Dim ptsperxamp;, ptsperyamp;

pt.x = 10
pt.y = 10
dlamp; = ClientToScreen(Command2.hwnd, pt)

screenxamp; = GetSystemMetrics(0) '0表x轴

screenyamp; = GetSystemMetrics(1) '1表y轴

destxamp; = pt.x * amp;HFFFFamp; / screenxamp;
destyamp; = pt.y * amp;HFFFFamp; / screenyamp;


ptsperxamp; = amp;HFFFFamp; / screenxamp;
ptsperyamp; = amp;HFFFFamp; / screenyamp;

' Now move it
Do
dlamp; = GetCursorPos(pt)
curxamp; = pt.x * amp;HFFFFamp; / screenxamp;
curyamp; = pt.y * amp;HFFFFamp; / screenyamp;
distxamp; = destxamp; - curxamp;
distyamp; = destyamp; - curyamp;
If (Abs(distxamp;) < 2 * ptsperxamp; And Abs(distyamp;) < 2 * ptspery) Then
' Close enough, go the rest of the way
curxamp; = destxamp;
curyamp; = destyamp;
finished% = True
Else
' Move closer
curxamp; = curxamp; + Sgn(distxamp;) * ptsperx * 2
curyamp; = curyamp; + Sgn(distyamp;) * ptspery * 2
End If
mouse_event MOUSEEVENTF_ABSOLUTE _
Or MOUSEEVENTF_MOVE, curx, cury, 0, 0
Loop While Not finished

' 到家了,按上右键吧!注:是左键,Showje的笔误
'以下是在(curx, cury)的座标下,模拟Mouse 左键的down and up
mouse_event MOUSEEVENTF_ABSOLUTE Or _
MOUSEEVENTF_LEFTDOWN, curx, cury, 0, 0

mouse_event MOUSEEVENTF_ABSOLUTE Or _
MOUSEEVENTF_LEFTUP, curx, cury, 0, 0

End Sub

Private Sub Command2_Click()
MsgBox "看你往哪儿逃!哈!!"
End Sub
关键字:  
您对这篇文章的看法是:    喜欢 反感 支持 反对 加油 鄙视 学习 打击 佩服 漂亮 路过 发表评论
1.您是否愿意通过eNet在线报名的方式,参加培训机构的培训?
是 
2.通过硅谷动力报名,您希望得到哪些优惠?
学费打折 赠送课时
3.报名后,您更愿意将培训费用:
通过eNet转交培训机构
直接交给培训机构
4.您在选择培训机构时,更注重:
培训机构名气  培训费用
5.您的年龄范围:
15~18岁  19~22岁
23岁以上
视频教程】 【专题汇总】 【不懂就问我关闭窗口

用Photoshop笔刷打造梦幻蝴蝶仙子
美不胜收 XP也用Vista七彩泡泡屏保
D.SPEED可爱的宇宙机器人设计欣赏
网络工程师必须掌握的44个路由知识
一周软件回顾 傲游软件易用性更强
相关文章
 本栏目最新文章
·编写电话拨号程序时一点小技巧
·VB开发应用软件之写在动手之前
·用VB实现“木马”式隐形运行程序
·怎样实现在VB窗体中有Html页面
·用VB编程实现图像的熠熠生辉效果
 精彩回放
·3DSMAX打造书本翻开效果
·共享上网技巧应用四则
·陪酒女浸泡在酒里的青春
·美女的性感靓丽婚纱设计
·妖冶身姿 死或生3壁纸
·剿灭Win XP下的29个烦恼
·黑客必备 NET命令大全
·用PS制作精致绝伦的红酒
 精彩推荐
 今日软件下载
汇聚精彩 清晰流畅
NETiTV
网络电视王中王
 往日推荐
·手工破解网吧多种限制
·Windows 网络管理技巧
·WMP 10使用技巧三则
·女孩问你帅不帅 要小心
·注册表优化XP 20招
·制作XP万能ghost光盘
·WMP10火拼DVD播放器
·街头霸王图片集中营
·五大搜索引擎横向评测
·防御计算机病毒十大步骤

论坛精华
·国外高手的调色合成 
·PS初学者十三课,献给 
·eNet学院史上最优秀 
·史上最强最多 photo 
·photoshop完美扣图教 
·PhotoShop实例精选电 
热点推荐
修复灰暗照片
浪漫婚纱照片
Flash视频编程
章子怡月历桌面
热点关注
·网站开发全程设计视频教程
·Photoshop CS3平面广告设计
·C++从入门到精通视频教程
·ASP.NET经典实例视频教程
·Flash8 Pro经典实例视频教程
·计算机等级考试二级VB上机
·eNet网络安全视频教程
·瑞星杀毒30元轻松用全年
·瑞星卡卡上网助手 正版免费
有女如莲 Photoshop手绘古典美女
往日推荐
网站重构设计
鹏哥C#教程
美女怀旧照片
网站开发
焦点关注