王朝网络
分享
 
 
 

用自己的意识去“遥控”鼠标

王朝厨房·作者佚名  2007-01-04
宽屏版  字体: |||超大  

遥远

所谓"用意识去遥控鼠标"就是在特定的环境下,通过某种命令,让无论在哪里的鼠标指针都会乖乖的回到你指定的区域里,并执行相应的动作。当然,这一切虽然都是按你的意识去做但绝不会是你自己用手来控制鼠标完成的。说了这些大家可能迷糊了,其实这只是一种遥控鼠标的技术,在很多流行的电脑教学软件中常会应用到此技术,比如在软件中进行某种讲解时,里面的鼠标指针不通过鼠标器指令也会伴随着讲解来执行一步一步的动作。这下大家明白了吧,其实在Windows系统中,利用

API就可以轻松的实现上面的遥控鼠标过程!

下面我们就开始对上述过程通过一段程序进行讲解,我们这段程序的目的就是:通过按下键盘的一个组合键,鼠标指针缓慢的移动到指定的按钮上并自动按下相应的按钮来激发某种事件。

就是这么一段过程,明白了吧,下面我们就开始做准备工作吧。首先,我们应该认识在以下程序中要用到的几个API函数,这几个函数,也就是程序的关键所在了:

1 GetCursorPos 获取鼠标指针在屏幕位置的函数。

2 SetCursorPos 移动鼠标指针函数,其参数X,Y指定了鼠标指针在屏幕上的坐标,GetCursorPos函数把鼠标指针当前位置存到了变量lpPoint中。

Private Type POINTAPI

X As Long

Y As Long

End Type

3 ClientToScreen 坐标平移变换函数,引入该函数就是为了取得我们目标按钮控件中心相对于屏幕坐标系的坐标位置。

4 SendMessage 向目标按钮发送执行鼠标左键按下和放开命令的函数,其中设置wMsg参数的取值分别为:WM_LBUTTONDOWN 和 WM_LBUTTONUP。

5 GetTickCount 延时函数,获取Windows启动至被调用时所经过的毫秒数。

然后在窗体中放置两个按钮控件与一个文本控件,再利用VB中的菜单编辑器完成一个热键为Alt-A的菜单。完成后就可以编写代码了:

先利用API查看器写下如下API声明:

Private Type POINTAPI

x As Long

y As Long

End Type

Dim Buttonpos As POINTAPI

Const WM_LBUTTONDOWN = &H201

Const WM_LBUTTONUP = &H202

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

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

Private Declare Function GetTickCount Lib "kernel32" () As Long

在程序运行时,我们首先要知道目标按钮控件相对于屏幕的坐标,所以在窗体运行时就应该执行如下的代码:

Private Sub Form_Load()

Text1.Text = "按Alt-A组合键开始演示"

Dim tmp As Long

With Command1

Buttonpos.x = (.Left + .Width / 2) / Screen.TwipsPerPixelX

Buttonpos.y = (.Top + .Height / 2) / Screen.TwipsPerPixelY

End With

tmp = ClientToScreen(Me.hwnd, Buttonpos)

End Sub

在本程序运行时,我们要遥控我们的鼠标,所以,我们通过键盘的快截键Alt-A激活菜单Clickbutton的Click事件进行鼠标指针的移动及单击左键运动:

Private Sub numyanshi_Click()

Dim Cursorpos As POINTAPI

Dim DistX As Double, DistY As Double

Dim tmp As Long

Dim i As Long

Dim PosX As Integer, PosY As Integer

Dim TickCount As Long

tmp = GetCursorPos(Cursorpos)

DistX = Buttonpos.x - Cursorpos.x

DistY = Buttonpos.y - Cursorpos.y

For i = 1 To 40000’解释:数值越大,鼠标运动越慢,相应的执行时间也就越长。

PosX = Cursorpos.x + DistX * i / 40000

PosY = Cursorpos.y + DistY * i / 40000

tmp = SetCursorPos(PosX, PosY)

Next i

tmp = SendMessage(Command1.hwnd, WM_LBUTTONDOWN, 0, 0)

TickCount = GetTickCount()

While GetTickCount() - TickCount < 200

tmp = DoEvents()

Wend

tmp = SendMessage(Command1.hwnd, WM_LBUTTONUP, 0, 0)

End Sub

当按下组合键后,我们会见到鼠标指针慢慢的移动到Command1按钮即目标按钮上,并按下按钮:

Private sub command1_Click()

Beep

text1.text="鼠标左键已经按下,演示完毕!"

End sub

单击Command2按钮退出程序:

Private sub command2_Click()

Unload Me

End sub

好了,以上程序完全完成了我们所期待的一段过程。在W98,VB6.0下调试通过,如果有任何问题欢迎与我联系。(email:mrdayuan@163.net)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有