某日笔者在网上见到了几个测定鼠标移动距离的程序,其中有一个是用VB写的,涉及到了注册表的使用,体积大的可观。其实我们完全没有必要用注册表,VB为我们提供了很好用的API函数。OK,现在就和我一起做一个这样的程序吧!
我们需要用到两个API函数:GetCursorPos和GetDeviceCaps。GetCursorPos的作用是得到鼠标所在位置的坐标,单位是象素。由于VB中通常使用Twip(缇)作单位,所以我们必须把象素划为缇。1象素=水平分辨率/屏幕宽。这就要求我们测得屏幕的分辨率。GetDeviceCaps的作用就是测定屏幕的分辨率。
首先声明这两个API函数,可以在API浏览器中粘连。
Private Declare Function GetCursorPos Lib "user32" (lpPoint As pointapi) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Type pointapi‘定义GetCursorPos中的参数
x As Long
y As Long
End Type
声名变量:
Dim Z As pointapi
Dim L, S, TOTAL
Public A, B, K, H
在窗体中放上两个Command,一个Label和一个Timer。Command1的Caption为“开始测定”,Command2的Caption为“退出”,其它属性不变。写入以下代码:
Private Sub Command1_Click()
GetCursorPos Z `得到初始鼠标位置
A = Z.x: B = Z.y
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
H = GetDeviceCaps&(hdc, 8) `得到屏幕水平分辨率(单位为象素)
K = Screen.Width `得到屏幕宽度(单位为twip)
Timer1.Interval=100 ‘理论上讲,数值约小,测得的结果约精确
Timer1.Enabled = False
S = 0
End Sub
Private Sub Timer1_Timer()
GetCursorPos Z
L = Sqr((Z.x - A) ^ 2 + (Z.y - B) ^ 2) `每次循环得到鼠标移动距离(单位为象素),方法有些象微分
S = S + L `得到总的路程(单位为象素)
TOTAL = Int(S * K / H * 2.54 / 1400 / 100 * 100) / 100 `将S单位由象素划为米,取到小数点后两位。1缇=2.540/1400/100米。
Label1.Caption = TOTAL
A = Z.x: B = Z.y `用新位置的坐标替换原来的坐标
End Sub
OK,按F5吧,看到那不断变化的数字了吗?而整个程序才不过12KB!真可谓小巧玲珑。
某日和朋友酣战“星际”,直战的天昏地暗,下机后才发现可爱的“老鼠”已陪我南争北战,冲锋陷阵了500多米,大惊。是不是有点惬意呢?
小生真诚希望能和广大VB高手切磋!
bear