'模块代码 Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) '拷贝内存 Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (Destination As Any, ByVal Length As Long) '清空内存 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 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 fsModifiers As Long, ByVal vk As Long) As Long '注册热键 Private Declare Function UnregisterHotKey Lib "User32" (ByVal hWnd As Long, ByVal id As Long) As Long '取消热键注册 Private Declare Function KeyValArrayPtr Lib "MSVBVM60.DLL" Alias "VarPtr" (ptr() As Any) As Long Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long '显示/隐藏窗口 Private Declare Function IsWindowVisible Lib "user32.dll" (ByVal hWnd As Long) As Long '判断指定窗口是否可见 Private Type SAFEARRAY1D cDims As Integer fFeatures As Integer cbElements As Long clocks As Long pvData As Long cElements As Long lLbound As Long End Type Private Const SW_SHOW = 5 Private Const SW_HIDE = 0 Private Const VK_F10 = &H79 Private Const VK_F11 = &H7A Private Const FADF_AUTO = &H1 Private Const WM_HOTKEY = &H312 Private Const MOD_ALT = &H1 Private Const MOD_CONTROL = &H2 Private Const MOD_SHIFT = &H4 Private Const GWL_WNDPROC = (-4) Private lpOldWndFunc As Long Private wKeyVal() As Integer Private dwKeyValue As Long Private lpSafeArray As SAFEARRAY1D '-------------------------------------------------------------------------------------- '函 数 名: WindowProcedure '描 述: 窗口消息处理函数 '-------------------------------------------------------------------------------------- Private Function WindowProcedure(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case wMsg Case WM_HOTKEY dwKeyValue = lParam Select Case wKeyVal(1) Case VK_F10 Call ShowWindow(hWnd, SW_SHOW) Case VK_F11 Call ShowWindow(hWnd, SW_HIDE) End Select Case Else WindowProcedure = CallWindowProc(lpOldWndFunc, hWnd, wMsg, wParam, _ lParam) '原窗口消息处理 End Select End Function '-------------------------------------------------------------------------------------- '函 数 名: SubClass '描 述: 子类化窗口 '-------------------------------------------------------------------------------------- Public Sub SubClass(ByVal hWnd As Long) With lpSafeArray .cDims = 1 .cElements = 2 .fFeatures = FADF_AUTO .pvData = VarPtr(dwKeyValue) End With Call CopyMemory(ByVal KeyValArrayPtr(wKeyVal), VarPtr(lpSafeArray), 4) lpOldWndFunc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProcedure) '新窗口消息处理 Call RegisterHotKey(hWnd, 1000, 0, VK_F10) '注册热键(F10) Call RegisterHotKey(hWnd, 1001, 0, VK_F11) '注册热键(F11) End Sub '-------------------------------------------------------------------------------------- '函 数 名: UnSubClass '描 述: 取消子类化 '-------------------------------------------------------------------------------------- Public Sub UnSubClass(ByVal hWnd As Long) Call UnregisterHotKey(hWnd, 1000) Call UnregisterHotKey(hWnd, 1001) Call ZeroMemory(ByVal KeyValArrayPtr(wKeyVal), 4) Call SetWindowLong(hWnd, GWL_WNDPROC, lpOldWndFunc) '恢复原窗口消息处理 End Sub '窗口代码 Option Explicit '-------------------------------------------------------------------------------------- '事 件 名: Form_Load '描 述: ---- '-------------------------------------------------------------------------------------- Private Sub Form_Load() Call SubClass(Me.hWnd) '子类化窗口 End Sub '-------------------------------------------------------------------------------------- '事 件 名: Form_Unload '描 述: ---- '-------------------------------------------------------------------------------------- Private Sub Form_Unload(Cancel As Integer) Call UnSubClass(Me.hWnd) '取消子类化 End Sub 这是他给我的代码,呵呵,非常之好
这些估计你们都晓得
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'拷贝内存
Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (Destination As Any, ByVal Length As Long)
'清空内存
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 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 fsModifiers As Long, ByVal vk As Long) As Long
'注册热键
Private Declare Function UnregisterHotKey Lib "User32" (ByVal hWnd As Long, ByVal id As Long) As Long
'取消热键注册
Private Declare Function KeyValArrayPtr Lib "MSVBVM60.DLL" Alias "VarPtr" (ptr() As Any) As Long
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
'显示/隐藏窗口
Private Declare Function IsWindowVisible Lib "user32.dll" (ByVal hWnd As Long) As Long
'判断指定窗口是否可见
Private Type SAFEARRAY1D
cDims As Integer
fFeatures As Integer
cbElements As Long
clocks As Long
pvData As Long
cElements As Long
lLbound As Long
End Type
Private Const SW_SHOW = 5
Private Const SW_HIDE = 0
Private Const VK_F10 = &H79
Private Const VK_F11 = &H7A
Private Const FADF_AUTO = &H1
Private Const WM_HOTKEY = &H312
Private Const MOD_ALT = &H1
Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4
Private Const GWL_WNDPROC = (-4)
Private lpOldWndFunc As Long
Private wKeyVal() As Integer
Private dwKeyValue As Long
Private lpSafeArray As SAFEARRAY1D
'--------------------------------------------------------------------------------------
'函 数 名: WindowProcedure
'描 述: 窗口消息处理函数
'--------------------------------------------------------------------------------------
Private Function WindowProcedure(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case wMsg
Case WM_HOTKEY
dwKeyValue = lParam
Select Case wKeyVal(1)
Case VK_F10
Call ShowWindow(hWnd, SW_SHOW)
Case VK_F11
Call ShowWindow(hWnd, SW_HIDE)
End Select
Case Else
WindowProcedure = CallWindowProc(lpOldWndFunc, hWnd, wMsg, wParam, _
lParam) '原窗口消息处理
End Select
End Function
'--------------------------------------------------------------------------------------
'函 数 名: SubClass
'描 述: 子类化窗口
'--------------------------------------------------------------------------------------
Public Sub SubClass(ByVal hWnd As Long)
With lpSafeArray
.cDims = 1
.cElements = 2
.fFeatures = FADF_AUTO
.pvData = VarPtr(dwKeyValue)
End With
Call CopyMemory(ByVal KeyValArrayPtr(wKeyVal), VarPtr(lpSafeArray), 4)
lpOldWndFunc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProcedure) '新窗口消息处理
Call RegisterHotKey(hWnd, 1000, 0, VK_F10) '注册热键(F10)
Call RegisterHotKey(hWnd, 1001, 0, VK_F11) '注册热键(F11)
End Sub
'--------------------------------------------------------------------------------------
'函 数 名: UnSubClass
'描 述: 取消子类化
'--------------------------------------------------------------------------------------
Public Sub UnSubClass(ByVal hWnd As Long)
Call UnregisterHotKey(hWnd, 1000)
Call UnregisterHotKey(hWnd, 1001)
Call ZeroMemory(ByVal KeyValArrayPtr(wKeyVal), 4)
Call SetWindowLong(hWnd, GWL_WNDPROC, lpOldWndFunc) '恢复原窗口消息处理
End Sub
'窗口代码
Option Explicit
'--------------------------------------------------------------------------------------
'事 件 名: Form_Load
'描 述: ----
'--------------------------------------------------------------------------------------
Private Sub Form_Load()
Call SubClass(Me.hWnd) '子类化窗口
End Sub
'--------------------------------------------------------------------------------------
'事 件 名: Form_Unload
'描 述: ----
'--------------------------------------------------------------------------------------
Private Sub Form_Unload(Cancel As Integer)
Call UnSubClass(Me.hWnd) '取消子类化
End Sub
这是他给我的代码,呵呵,非常之好