'frmMain VERSION 5.00 Begin VB.Form FrmMain Caption = "Form1" ClientHeight = 1890 ClientLeft = 60 ClientTop = 345 ClientWidth = 6165 LinkTopic = "Form1" ScaleHeight = 1890 ScaleWidth = 6165 StartUpPosition = 3 '窗口缺省 Begin VB.Label Label1 AutoSize = -1 'True Caption = "侦测有没有按到PrintScreen键" BeginProperty Font Name = "宋体" Size = 15.75 Charset = 134 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 315 Left = 705 TabIndex = 0 Top = 660 Width = 4335 End End Attribute VB_Name = "FrmMain" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit'以下在Form Private Sub Form_Load() Call EnableKBDHook End SubPrivate Sub Form_Unload(Cancel As Integer) Call UnHookKBD End Sub'HookModule Option ExplicitDeclare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long Public hnexthookproc As Long Public Const HC_ACTION = 0 Public Const WH_KEYBOARD = 2Public Sub UnHookKBD() If hnexthookproc <> 0 Then UnhookWindowsHookEx hnexthookproc hnexthookproc = 0 End If End SubPublic Function EnableKBDHook() If hnexthookproc <> 0 Then Exit Function hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _ MyKBHFunc, App.hInstance, 0) If hnexthookproc <> 0 Then EnableKBDHook = hnexthookproc End FunctionPublic Function MyKBHFunc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long '这三个参数是固定的,不能动,而MyKBHFunc这个名称只要和 'SetWindowsHookex()中 AddressOf後的名称一样便可,不一定叫什麽 'wParam 是传入按了哪个key的virtual-key code '如果您将以下的两行un则所有键盘的输入皆没有作用 'MyKBHFunc = 1 '吃掉信息 MyKBHFunc = 0 '信息要处理 If iCode < 0 Then MyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam) Exit Function End If If wParam = vbKeySnapshot Then '侦测有没有按到PrintScreen键 MyKBHFunc = 1 '在这个Hook便吃掉这个信息 Debug.Print "haha" & " " & wParam & " " & lParam Else Call CallNextHookEx(hnexthookproc, iCode, wParam, lParam) End If End Function
VERSION 5.00
Begin VB.Form FrmMain
Caption = "Form1"
ClientHeight = 1890
ClientLeft = 60
ClientTop = 345
ClientWidth = 6165
LinkTopic = "Form1"
ScaleHeight = 1890
ScaleWidth = 6165
StartUpPosition = 3 '窗口缺省
Begin VB.Label Label1
AutoSize = -1 'True
Caption = "侦测有没有按到PrintScreen键"
BeginProperty Font
Name = "宋体"
Size = 15.75
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 705
TabIndex = 0
Top = 660
Width = 4335
End
End
Attribute VB_Name = "FrmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit'以下在Form
Private Sub Form_Load()
Call EnableKBDHook
End SubPrivate Sub Form_Unload(Cancel As Integer)
Call UnHookKBD
End Sub'HookModule
Option ExplicitDeclare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public hnexthookproc As Long
Public Const HC_ACTION = 0
Public Const WH_KEYBOARD = 2Public Sub UnHookKBD()
If hnexthookproc <> 0 Then
UnhookWindowsHookEx hnexthookproc
hnexthookproc = 0
End If
End SubPublic Function EnableKBDHook()
If hnexthookproc <> 0 Then Exit Function
hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _
MyKBHFunc, App.hInstance, 0)
If hnexthookproc <> 0 Then EnableKBDHook = hnexthookproc
End FunctionPublic Function MyKBHFunc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'这三个参数是固定的,不能动,而MyKBHFunc这个名称只要和
'SetWindowsHookex()中 AddressOf後的名称一样便可,不一定叫什麽
'wParam 是传入按了哪个key的virtual-key code
'如果您将以下的两行un则所有键盘的输入皆没有作用
'MyKBHFunc = 1 '吃掉信息
MyKBHFunc = 0 '信息要处理
If iCode < 0 Then
MyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
Exit Function
End If
If wParam = vbKeySnapshot Then '侦测有没有按到PrintScreen键
MyKBHFunc = 1 '在这个Hook便吃掉这个信息
Debug.Print "haha" & " " & wParam & " " & lParam
Else
Call CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
End If
End Function