|
发表于 2012-10-27 18:35:53
|
显示全部楼层
Option Explicit
Public Type EVENTMSG
vKey As Long
sKey As Long
Flag As Long
time As Long
End Type
Public MyMsg As EVENTMSG
Public Const WH_KEYBOARD_LL = 13
Public Const WM_KEYDOWN = &H100
Public Const HIDE_WINDOW = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_SHOWNOACTIVATE = 4
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Dim hHookID As Long, HookIng As Boolean
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If nCode >= 0 Then
If wParam = WM_KEYDOWN Then
CopyMemory MyMsg, ByVal lParam, Len(MyMsg)
If MyMsg.sKey = 82 Then
If HookIng Then
'隐藏窗口
Call ShowWindow(FrmMain.hwnd, SW_SHOWNORMAL)
Else
'显示窗口
Call ShowWindow(FrmMain.hwnd, HIDE_WINDOW)
End If
HookIng = Not HookIng
End If
End If
End If
HookProc = CallNextHookEx(hHookID, nCode, wParam, lParam)
End Function
Public Sub RunThread(ByVal lpParam As Long)
Dim hWndForm As Long
'创建 全局键盘Hook
hHookID = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HookProc, lpParam, 0)
'加载窗体
FrmMain.Show
Do
DoEvents
Sleep 1
Loop
End Sub
'///Dll入口模块
Public Function DLLMain(ByVal hinstDLL As Long, ByVal fdwReason As Long, ByVal lpvReserved As Long) As Long
If fdwReason = DLL_PROCESS_ATTACH Then 'dll加载
DLLMain = 1
'初始化
InitVbDll
' 创建线程
CreateThread AddressOf RunThread, ByVal hinstDLL
ElseIf fdwReason = DLL_PROCESS_DETACH Then 'dll卸载
AuxMem.FreeLibraryAndExitThread hinstDLL, 0
End If
End Function
Sub Main()
'XXOO
End Sub
|
|