Mungkin akan membuat Anda pusing, namun selama Anda mengetahui ilmu VB dan menginginkan hal tersebut, Anda harus mempelajarinya dengan cermat.
modHook.bas
Opsi Eksplisit
Fungsi Deklarasi Publik CallNextHookEx Lib user32.dll (ByVal hHook Selama, ByVal nCode Selama, ByVal wParam Selama, lparam Selamanya) Selama
Deklarasikan Publik Sub CopyMemory Lib kernel32 Alias RtlMoveMemory (lpDest As Any, lpSource As Any, ByVal cBytes As Long)
Deklarasikan Publik Sub keybd_event Lib user32 (ByVal bVk Sebagai Byte, ByVal bScan Sebagai Byte, ByVal dwFlags Selama, ByVal dwExtraInfo Selama)
Data Publik() Sebagai String
NUM Publik Selama
OldHook Publik Selamanya
LngClsPtr Publik Selama
BackHook Fungsi Publik (ByVal nCode Selama, ByVal wParam Selama, ByVal lparam Selama) Selama
Jika nCode < 0 Maka
BackHook = CallNextHookEx(OldHook, nCode, wParam, lparam)
Fungsi Keluar
Akhiri Jika
ResolvePointer(LngClsPtr).RiseEvent (lparam)
Hubungi CallNextHookEx(OldHook, nCode, wParam, lparam)
Fungsi Akhir
Fungsi Pribadi ResolvePointer (ByVal lpObj Selama) Sebagai ClsHook
Redupkan oSH Sebagai ClsHook
SalinMemori oSH, lpObj, 4&
Setel ResolvePointer = oSH
SalinMemori oSH, 0&, 4&
Fungsi Akhir
ClsHook.cls
Opsi Eksplisit
KeyDown Acara Publik (Kode Kunci Sebagai Integer, Shift Sebagai Integer)
EVENTMSG Tipe Pribadi
wMsg Selama
lParamRendah Selama
lParamTinggi Selama
pesanWaktu Selamanya
hWndMsg Selama
Tipe Akhir
Konst Pribadi WH_JOURNALRECORD = 0
Konst Pribadi WM_KEYDOWN = &H100
Fungsi Deklarasi Pribadi SetWindowsHookEx Lib user32.dll Alias SetWindowsHookExA (ByVal idHook Selama, ByVal lpfn Selama, ByVal hmod Selama, ByVal dwThreadId Selama) Selama
Fungsi Deklarasi Pribadi UnhookWindowsHookEx Lib user32.dll (ByVal hHook Selama) Selama
Fungsi Deklarasi Pribadi GetAsyncKeyState Lib user32.dll (ByVal vKey Selama) Sebagai Integer
Sub SetHook() Publik
OldHook = SetWindowsHookEx(WH_JOURNALRECORD, Alamat BackHook, App.hInstance, 0)
Akhiri Sub
Sub Publik Lepas Kait()
Hubungi UnhookWindowsHookEx(OldHook)
Akhiri Sub
Fungsi Teman RiseEvent (ByVal lparam Selama) Selama
Redupkan Pesan Sebagai EVENTMSG
Redupkan IntShift Sebagai Integer
Redupkan IntCode Sebagai Integer
Pesan CopyMemory, ByVal lparam, Len(Pesan)
Pergeseran Int = 0
Pilih Pesan Kasus.wMsg
Kasus WM_KEYDOWN
Jika GetAsyncKeyState(vbKeyShift) Maka IntShift = (IntShift Atau 1)
Jika GetAsyncKeyState(vbKeyControl) Maka IntShift = (IntShift Atau 2)
Jika GetAsyncKeyState(vbKeyMenu) Maka IntShift = (IntShift Atau 4)
IntCode = Msg.lParamLow Dan &HFF
Debug.Print Msg.lParamLow
Debug.Cetak & HFF
RaiseEvent KeyDown (IntCode, IntShift)
Pilihan Akhir
Fungsi Akhir
Sub Kelas Pribadi_Inisialisasi()
LngClsPtr = ObjPtr(Saya)
Akhiri Sub
formulir1.frm
Opsi Eksplisit
Redupkan Dengan Kait Acara Sebagai ClsHook
Fungsi Deklarasi Pribadi MapVirtualKeyEx Lib user32 Alias MapVirtualKeyExA (ByVal uCode Selama, ByVal uMapType Selama, ByVal dwhkl Selama) Selama
Fungsi Deklarasi Pribadi GetKeyboardLayout Lib user32 (ByVal dwLayout Selama) Selama
Fungsi Deklarasi Pribadi GetForegroundWindow Lib user32() Selama
Fungsi Deklarasi Pribadi GetWindowThreadProcessId Lib user32 (ByVal hwnd Selama, lpdwProcessId Selama) Selama
Sub Pribadi Hook_KeyDown (Kode Kunci Sebagai Integer, Shift Sebagai Integer)
Redupkan StrCode Sebagai String
StrCode = KodeToString(Kode Kunci)
Jika StrCode = [Shift] Atau StrCode = [Alt] Atau StrCode = [Ctrl] Maka
Jika Shift = vbAltMask + vbCtrlMask Kemudian StrCode = [Alt + Ctrl]
Jika Shift = vbAltMask + vbShiftMask Maka StrCode = [Alt + Shift]
Jika Shift = vbCtrlMask + vbShiftMask Kemudian StrCode = [Ctrl + Shift]
Jika Shift = vbCtrlMask + vbShiftMask + vbAltMask Maka StrCode = [Ctrl + Shift +Alt]
Kalau tidak
Jika Shift = vbShiftMask Maka StrCode = [Shift] + & StrCode
Jika Shift = vbCtrlMask Maka StrCode = [Ctrl] + & StrCode
Jika Shift = vbAltMask Maka StrCode = [Alt] + & StrCode
Jika Shift = vbAltMask + vbCtrlMask Kemudian StrCode = [Alt + Ctrl] + & StrCode
Jika Shift = vbAltMask + vbShiftMask Kemudian StrCode = [Alt + Shift] + & StrCode
Jika Shift = vbCtrlMask + vbShiftMask Kemudian StrCode = [Ctrl + Shift] + & StrCode
Jika Shift = vbCtrlMask + vbShiftMask + vbAltMask Maka StrCode = [Ctrl + Shift +Alt] + & StrCode
Akhiri Jika
Jika LCase(StrCode) = LCase(HotKey) Then ' Bagian ini merupakan fungsi sederhana setelah keyboard HOOK, yaitu untuk menyembunyikan dan menampilkan jendela dari.
Jika App.TaskVisible = Salah Maka
Saya.Tunjukkan
App.TaskVisible = Benar
Kalau tidak
Aku. Sembunyikan
App.TaskVisible = Salah
Akhiri Jika
Akhiri Jika
Akhiri Sub
Fungsi Pribadi CodeToString (nCode As Integer) Sebagai String
Redupkan StrKey Sebagai String
Pilih Kasus nCode
Kasus vbKeyBack: StrKey = BackSpace
Kasus vbKeyTab: StrKey = Tab
Kasus vbKeyClear: StrKey = Hapus
Kasus vbKeyReturn: StrKey = Masuk
Kasus vbKeyShift: StrKey = Shift
Kasus vbKeyControl: StrKey = Ctrl
Kasus vbKeyMenu: StrKey = Alt
Kasus vbKeyPause: StrKey = Jeda
Kasus vbKeyCapital: StrKey = CapsLock
Kasus vbKeyEscape: StrKey = ESC
Kasus vbKeySpace: StrKey = SPASI
Kasus vbKeyPageUp: StrKey = HALAMAN ATAS
Kasus vbKeyPageDown: StrKey = HALAMAN BAWAH
Kasus vbKeyEnd: StrKey = AKHIR
Kasus vbKeyHome: StrKey = RUMAH
Kasus vbKeyLeft: StrKey = PANAH KIRI
Kasus vbKeyUp: StrKey = PANAH ATAS
Kasus vbKeyRight: StrKey = PANAH KANAN
Kasus vbKeyDown: StrKey = PANAH BAWAH
Kasus vbKeySelect: StrKey = PILIH
Kasus vbKeyPrint: StrKey = CETAK LAYAR
Kasus vbKeyExecute: StrKey = EXECUTE
Kasus vbKeySnapshot: StrKey = SNAPSHOT
Kasus vbKeyInsert: StrKey = INS
Kasus vbKeyDelete: StrKey = DEL
Kasus vbKeyHelp: StrKey = BANTUAN
Kasus vbKeyNumlock: StrKey = NUM LOCK
Kasus vbKey0 Ke vbKey9: StrKey = Chr$(nCode)
Kasus vbKeyA Ke vbKeyZ: StrKey = LCase(Chr$(nCode)) 'MapVirtualKeyEx(nCode, 2, GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, 0))))
Kasus vbKeyF1 Ke vbKeyF16: StrKey = F & CStr(nCode - 111)
Kasus vbKeyNumpad0 Ke vbKeyNumpad9: StrKey = Numpad & CStr(nCode - 96)
Kasus vbKeyMultiply: StrKey = Numpad {*}
Kasus vbKeyAdd: StrKey = Numpad {+}
Kasus vbKeySeparator: StrKey = Numpad {ENTER}
Kasus vbKeySubtract: StrKey = Numpad {-}
Kasus vbKeyDecimal: StrKey = Numpad {.}
Kasus vbKeyDivide: StrKey = Numpad {/}
Kasus Lain
StrKey = Chr$(MapVirtualKeyEx(nCode, 2, GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, 0)))) & Str(MapVirtualKeyEx(nCode, 2, GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, 0))))
Pilihan Akhir
CodeToString = [ & StrKey & ]
Fungsi Akhir