返回首页
当前位置: 主页 > 网络编程 > 其他实例教程 >

在VB中如何用API监控鼠标和键盘

时间:2012-12-28 10:11来源:betway必威官网www.etsupport.net 编辑:麦田守望者

本例中的钩子用来监视并记录应用程序中的按键信息。
在程序中,ALT+F4组合键被屏蔽。下面是部分代码:

Public hHook as Long
Private Sub Form_Load()′程序启动时安装钩子
hHook=SetWindowsHookEx(2,Address of MyKBHook,0,App.ThreadID)
End Sub
′具体的钩子程序,本例中该过程被包含在Module1中
Public Function MyKBHook(ByVal nCode As Long,ByVal wParam As Long,ByVal

lParam As Long)As Long
If nCode>=0 then
Open "C:\Keyfile.txt" For Append As #1 '将键盘的操作记录在Keyfile.txt文件之中
'记录所操作的键、操作时间、日期操作时的按键状态,用16进制记录
Write #1,wParam,Hex(lParam),Date,time
Close #1
MyKBHook=0 '表示要处理这个消息
'屏蔽ALT+F4组合键
if wParam=115 And(lParam And&H20000000)<>0 Then
if(lParam And &HC000000)=0 Then  '是否进行ALT+F4操作
MyHBHook=1 '钩子吃掉这个消息
End if
End if
End if
Call CallNextHookEx(hHook,nCode,wParam,lParam)'将消息传给下一个钩子
End Function
'程序退出时卸载钩子
Private Sub Form_Unload(Cancel As Interger)
Call Unhook WindowsHookEx(hHook)
End Sub
鼠标:
A:在Timer控件中不断使用GetCursor取得鼠标的位置
B:使用Hook。
如果是鼠标键盘钩子(WH_MOUSE),系统级的需要将回掉函数放在dll中,但VB不能写普通dll(不

能是VB的ActiveX DLL),需要用其他编程工具写(如VC++、Delphi、Borland C++ Builder)
如果是鼠标键盘钩子(WH_MOUSE_LL),则本身就是系统级的,不需要dll,但只能在NT系统

(WinNT4/2000/XP/2003)下使用

键盘:
A:在Timer控件中不断使用GetAsyncKeyState取得按键信息
B:使用Hook。
如果是普通键盘钩子(WH_KEYBOARD),系统级的需要将回掉函数放在dll中,但VB不能写普通dll(

不能是VB的ActiveX DLL),需要用其他编程工具写(如VC++、Delphi、Borland C++ Builder)
如果是底层键盘钩子(WH_KEYBOARD_LL),则本身就是系统级的,不需要dll,但只能在NT系统

(WinNT4/2000/XP/2003)下使用




GetCursorPos

VB声明
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As

POINTAPI) As Long
说明
获取鼠标指针的当前位置
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
lpPoint POINTAPI,随同指针在屏幕像素坐标中的位置载入的一个结构




GetAsyncKeyState

VB声明
Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal

vKey As Long) As Integer
说明
判断函数调用时指定虚拟键的状态
返回值
Long,自对GetAsyncKeyState函数的上一次调用以来,如键已被按过,则位0设为1;否则设为0。如键目前处

于按下状态,则位15设为 1;如抬起,则为0。微软的win32手册指出:倘若输入焦点从属于与调用函数的输入

线程不同的另一个输入线程,则返回值为0(例如,一旦另一个程序拥有焦点,则它应返回零)。证据显示,函

数实际是在整个系统的范围内工作的
参数表
参数 类型及说明
vKey Long,欲测试的虚拟键的键码
注解
如指定了VK_LBUTTON 或 VK_RBUTTON,按钮的状态就会根据实际的按钮报告——无论是否曾用

SwapMouseButton函数对鼠标的位置进行了交换。win32提供了额外的一些虚拟键码,比如VK_LSHIFT 和

VK_RSHIFT,以便在两个完全一样的键中区分出左右(也包括Ctrl 和 Alt)

标准的作法还是使用全局底层钩子。
如zyl910所说,对于鼠标和键盘,分别对应一个底层钩子。
 

顶一下
(2)
100%
踩一下
(0)
0%
标签(Tag):VB程序设计
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片