当前位置:编程学习 > VB >>

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 = False

Private 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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,