'**********************************************************************
'此模块的功能:
'
'用 VB 实现全局热键模块
'武汉 艾军
'在软件报以前的文章中,虽然也介绍了如何用 VB 实现全局热键的方法,但是这些文章都只是针对初学者学习技巧而用,而在真正的程序编写中是不适应的,为了使我们编写的程序有继承性、维护性因此有必要制作一个实现全局热键的模块。
'请大家看看下面调用全局热键的示例:
'激活 3 个热键:(注:SetHotkey 是我自定义的函数)
'SetHotkey 1, "Ctrl,112", "Add"
'SetHotkey 2, 113, "Add"
'SetHotkey 3, "Ctrl+Alt,113", "Add"
'注释:注:关于激活热键后的操作,由自定义函数 SetHotkey 的 KeyId 传送的值来判断
'注销 3 个热键:
'SetHotkey 1, "", "Del"
'SetHotkey 2, "", "Del"
'SetHotkey 3, "", "Del"
'请大家新建一个模块(.bas)文件,自定义 SetHotkey函数及其他,这样在以后的任何程序中只要调用此模块就可以了。
'**********************************************************************
'**********************************************************************
'以下是键盘中各键对应的ASCII值
'值
'3
'8
'9
'12
'13
'18
'19
'20
'27
'32
'33
'34
'35
'36
'37
'38
'39
'40
'41
'42
'43
'44
'45
'46
'47
'144
'主键盘区中的数字键
'值
'48 0 键
'49 1 键
'50 2 键
'51 3 键
'52 4 键
'53 5 键
'54 6 键
'55 7 键
'56 8 键
'57 9 键
'26个字母
'值
'65
'66
'67
'68
'69
'70
'71
'72
'73
'74
'75
'76
'77
'78
'79
'80
'81
'82
'83
'84
'85
'86
'87
'88
'89
'90
'小键盘中的数字键及符号键
'值
'96 0 键
'97 1 键
'98 2 键
'99 3 键
'100 4 键
'101 5 键
'102 6 键
'103 7 键
'104 8 键
'105 9 键
'106 MULTIPLICATION SIGN (*) 键
'107 PLUS SIGN (+) 键
'108 ENTER 键 ()
'109 MINUS SIGN (-) 键
'110 DECIMAL POINT (.) 键 ( )
'111 DIVISION SIGN (/) 键
'功能键F1-F16
'值
'112 F1 键
'113 F2 键
'114 F3 键
'115 F4 键
'116 F5 键
'117 F6 键
'118 F7 键
'119 F8 键
'120 F9 键
'121 F10 键
'122 F11 键
'123 F12 键
'124 F13 键
'125 F14 键
'126 F15 键
'127 F16 键
'**********************************************************************
'**********************************************************************
'变量、常量、API函数定义区
Option Explicit
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function CallWindowProc Lib "User32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function RegisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long, ByVal fskey_Modifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long) As Long
Const WM_HOTKEY = &H312
Const MOD_ALT = &H1
Const MOD_CONTROL = &H2
Const MOD_SHIFT = &H4
Const GWL_WNDPROC = (-4)
Dim key_preWinProc As Long
Dim key_Modifiers As Long, key_uVirtKey As Long, key_idHotKey As Long
Dim key_IsWinAddress
'**********************************************************************
'**********************************************************************
'此自定义函数用于执行相应热键的操作
Function keyWndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
End Function
'**********************************************************************
'**********************************************************************
'此自定义函数的功能有二
'功能一:
'
'功能二:
'
Function SetHotkey(ByVal KeyId As Long, ByVal KeyAss0 As String, ByVal Action As String)
End Function
'**********************************************************************