'窗体中的代码 Private Sub Form_Load() RegisterWindow Me.hwnd RegisterHotKey Me.hwnd, &H99CC, 0, vbKeyF12 End SubPrivate Sub Form_Unload(Cancel As Integer) unRegisterWindow Me.hwnd End Sub '模块中的代码Option Explicit Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public 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 Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long Public Const WM_HOTKEY = &H312 Public Const WM_SHOWWINDOW = &H18 Public oldproc As LongPublic Function RegisterWindow(hwnd As Long) As Long If hwnd <> 0 Then oldproc = SetWindowLong(hwnd, -4, AddressOf WinProc) End If End Function Public Function unRegisterWindow(hwnd As Long) As Long
If hwnd <> 0 Then SetWindowLong hwnd, -4, oldproc End IfEnd Function Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long If msg = WM_HOTKEY Then If lpara = &H99CC Then Exit Function End IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function
修正:Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long If msg = WM_HOTKEY Then If lpara = &H99CC Then form1.show End IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function
首先谢谢你了 但是我按F12键没有显示form1的窗体啊 Private Sub Form_Load() RegisterWindow Me.hwnd RegisterHotKey Me.hwnd, &H99CC, 0, vbKeyF12 End SubPrivate Sub Form_Unload(Cancel As Integer) unRegisterWindow Me.hwnd End Sub 我试过这段代码 没有问题啊 我添加了一 个类模块 Option Explicit Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public 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 Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long Public Const WM_HOTKEY = &H312 Public Const WM_SHOWWINDOW = &H18 Public oldproc As LongPublic Function RegisterWindow(hwnd As Long) As Long If hwnd <> 0 Then oldproc = SetWindowLong(hwnd, -4, AddressOf WinProc) End If End Function Public Function unRegisterWindow(hwnd As Long) As Long
If hwnd <> 0 Then SetWindowLong hwnd, -4, oldproc End IfEnd Function Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long If msg = WM_HOTKEY Then If lpara = &H99CC Then form1.show End IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function运行后按F12没有显示form1窗体啊
'修改过程winproc Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long If msg = WM_HOTKEY ThenIf lpara = &H99CC Then Form1.WindowState = 0: Form1.ShowEnd IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function
Private Sub Form_Load()
RegisterWindow Me.hwnd
RegisterHotKey Me.hwnd, &H99CC, 0, vbKeyF12
End SubPrivate Sub Form_Unload(Cancel As Integer)
unRegisterWindow Me.hwnd
End Sub
'模块中的代码Option Explicit
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long
Public Const WM_HOTKEY = &H312
Public Const WM_SHOWWINDOW = &H18
Public oldproc As LongPublic Function RegisterWindow(hwnd As Long) As Long
If hwnd <> 0 Then
oldproc = SetWindowLong(hwnd, -4, AddressOf WinProc)
End If
End Function
Public Function unRegisterWindow(hwnd As Long) As Long
If hwnd <> 0 Then
SetWindowLong hwnd, -4, oldproc
End IfEnd Function
Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long
If msg = WM_HOTKEY Then
If lpara = &H99CC Then Exit Function
End IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function
If msg = WM_HOTKEY Then
If lpara = &H99CC Then form1.show
End IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function
Private Sub Form_Load()
RegisterWindow Me.hwnd
RegisterHotKey Me.hwnd, &H99CC, 0, vbKeyF12
End SubPrivate Sub Form_Unload(Cancel As Integer)
unRegisterWindow Me.hwnd
End Sub
我试过这段代码 没有问题啊
我添加了一 个类模块
Option Explicit
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long
Public Const WM_HOTKEY = &H312
Public Const WM_SHOWWINDOW = &H18
Public oldproc As LongPublic Function RegisterWindow(hwnd As Long) As Long
If hwnd <> 0 Then
oldproc = SetWindowLong(hwnd, -4, AddressOf WinProc)
End If
End Function
Public Function unRegisterWindow(hwnd As Long) As Long
If hwnd <> 0 Then
SetWindowLong hwnd, -4, oldproc
End IfEnd Function
Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long
If msg = WM_HOTKEY Then
If lpara = &H99CC Then form1.show
End IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function运行后按F12没有显示form1窗体啊
form1.hwnd,但还是没看到有什么效果,就这个代码的整体看来,并不是HOOK,像是注册一个热键,但没有看到效果所以说我不明白这个代码有什么用
但是还是不显示
在WIN2K以上的OS,用HOOK
在9X,用TIMER时时检测,API:GETKEYSTATE
你在2K下试了吗?
Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long
If msg = WM_HOTKEY ThenIf lpara = &H99CC Then Form1.WindowState = 0: Form1.ShowEnd IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function
[email protected]