vb利用api实现监控键盘
hacknote.com
以下为Form1.frm代码
VERSION 5.00
Begin VB.Form Form1
Caption = "vb利用api实现监控键盘 ^_^ -- *^_^*"
ClientHeight = 3195
ClientLeft = 60
ClientTop = 345
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3195
ScaleWidth = 4680
StartUpPosition = 1 所有者中心
Visible = 0 False
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = FalsePrivate Sub Form_Load()
MsgBox "按下F12键,窗体就会显示"
SetTimer Me.hwnd, 0, 500, AddressOf TimerProc 每0.001秒调用一次TimerProc
End Sub
Private Sub Form_Unload(Cancel As Integer)
KillTimer Me.hwnd, 0 退出时杀掉回调处理函数,防错
End Sub
Module1.bas代码
Attribute VB_Name = "Module1"
回调处理函数
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
杀掉Timer回调处理函数
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
GetAsyncKeyState
VB声明
Declare Function GetAsyncKeyState Lib "user32" (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)
Global i&, s$ 全局变量Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
s = 129 设置一个初始值让它不在0到128之内
For i = 0 To 128 for找到键盘输入值
If GetAsyncKeyState(i) <> 0 And i = 123 Then GetAsyncKeyState这个api上面有说明,F12的ascii码是123
If i <> s Then 减少设置次数,因为每0.5秒就要调用一次些函数
s = i 同上原理
Form1.Visible = True 设置窗体可见
KillTimer Form1.hwnd, 0 杀掉Timer回调处理函数
End If
Exit For 退出for
End If
Next i
End Sub
我希望大家不紧要把笔记这个平台当做"做笔记"的地方,同时也要当做一个学习的平台,大家相互学习
补充:软件开发 , Vb ,