IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Les Hooks


Sujet :

Windows

  1. #1
    Membre habitué Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Points : 179
    Points
    179
    Par défaut Les Hooks
    Salam
    j'ai trouvé un code pour un programme qui install un hokk de clavier pour empecher la touche imprimer ecran.
    Mais je compile le programme cela ne marche pas il ne me donne rien, aidez moi s'il vous plait .
    voila le code :
    la DLL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #include <windows.h>
    #define WH_KEYBOARD_LL     13
    /*
    typedef struct &#123;
        DWORD vkCode;
        DWORD scanCode;
        DWORD flags;
        DWORD time;
        ULONG_PTR dwExtraInfo;
    &#125; KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT; */
    
    HINSTANCE moduleCourant;
    HHOOK hookClavier;
    
    LRESULT CALLBACK fonctionIntercepteClavierLowLevel &#40;int nCode, WPARAM wParam, LPARAM lParam&#41;
    &#123;
            MessageBox&#40;NULL,"func",0,0 &#41;;
        if&#40;nCode == HC_ACTION&#41;
        &#123;
            KBDLLHOOKSTRUCT kbStruct = *&#40;&#40;KBDLLHOOKSTRUCT *&#41;lParam&#41;;
            switch&#40;wParam&#41;
            &#123;
                case WM_KEYDOWN&#58;
                    if &#40;kbStruct.vkCode == VK_LWIN || kbStruct.vkCode == VK_RWIN&#41; // bloque touches windows
                        return 1;
                    if &#40;kbStruct.vkCode == VK_ESCAPE && GetAsyncKeyState&#40;VK_CONTROL&#41;&#41; // bloque control+echap
                            return 1;
                    if &#40;kbStruct.vkCode == VK_SNAPSHOT&#41; // bloque impr écran
                       return 1;
            &#125;
        &#125;
        return CallNextHookEx&#40;hookClavier, nCode, wParam, lParam&#41;;
    &#125;
    
    extern "C" __declspec&#40;dllexport&#41; int installeLeHookClavier&#40;&#41;
    &#123;
        if&#40; !hookClavier &#41;
        &#123;
             MessageBox&#40;NULL,"install",0,0 &#41;;
            hookClavier  = SetWindowsHookEx&#40;WH_KEYBOARD_LL, fonctionIntercepteClavierLowLevel, moduleCourant, 0&#41;;
        &#125;
        return &#40;int&#41; hookClavier;
    &#125;
    
    extern "C" __declspec&#40;dllexport&#41; void ArreteLeHookClavier&#40;&#41;
    &#123;
            MessageBox&#40;NULL,"arret",0,0 &#41;;
        if&#40;hookClavier&#41;
        &#123;
                      
            UnhookWindowsHookEx&#40;hookClavier&#41;;
            hookClavier = 0;
        &#125;
    &#125;
    
    BOOL WINAPI DllMain &#40;HINSTANCE hDll, DWORD dwReason, LPVOID Reserved&#41;
    &#123;
        if &#40;dwReason == DLL_PROCESS_ATTACH&#41;
        &#123;
            moduleCourant = hDll;
        &#125;
        if &#40;dwReason == DLL_PROCESS_DETACH&#41;
        &#123;
            ArreteLeHookClavier&#40;&#41;;
        &#125;
        return 1;
    &#125;
    Le programme main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <windows.h>
    #include "resource.h"
    
    #pragma comment&#40; lib, "hookToucheWindowsDll.lib" &#41;
    
    //extern "C" int __stdcall installeLeHookClavier&#40;&#41;;
    
    //extern "C" void __stdcall ArreteLeHookClavier&#40;&#41;;
    typedef void &#40;*TEndFunc&#41;&#40;&#41;;
    TEndFunc installeLeHookClavier;
    TEndFunc ArreteLeHookClavier;
    HINSTANCE hinstDLL;
    
    int WINAPI WinMain&#40;HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow&#41;
    &#123;
        hinstDLL = LoadLibrary&#40;"hook.dll"&#41;;
        installeLeHookClavier=&#40;TEndFunc&#41;GetProcAddress&#40;hinstDLL, "installeLeHookClavier"&#41;;
        ArreteLeHookClavier=&#40;TEndFunc&#41;GetProcAddress&#40;hinstDLL, "ArreteLeHookClavier"&#41;;
        installeLeHookClavier&#40;&#41;;
        Sleep&#40;60000&#41;;
        ArreteLeHookClavier&#40;&#41;;
        return 1;
    &#125;
    Merci d'avance.

  2. #2
    Membre habitué Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Points : 179
    Points
    179
    Par défaut re
    le probleme est dans le dll
    parceque lorsque je fait FormatMessage elle me donne l'erreur suivante :

    impossible d'établir un hook non local sans un descripteur de module

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    A priori c'est que moduleCourant est NULL (fait un test). T'es sûr que DllMain est bien appelé ?

  4. #4
    Membre habitué Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Points : 179
    Points
    179
    Par défaut
    OUI c sa DLLMAIN ne s'execute pas ????
    que dois-je faire ???

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Regarde l'entry point de ton projet (sous VC++, options du projet->editeur de liens->point d'entrée). Normalement il doit être vide. Si c'est déjà le cas, écrit DllMain. Mais ça serait bizarre...

Discussions similaires

  1. [HOOK] Problème(s) pour réaliser le tutoriel sur les HOOKS
    Par Rodrigue dans le forum C++Builder
    Réponses: 13
    Dernier message: 27/07/2016, 18h22
  2. [Hook] Les hooks en rapport avec Trunk et Branches
    Par codefalse dans le forum Subversion
    Réponses: 2
    Dernier message: 03/11/2008, 15h23
  3. Tuto sur les Hooks
    Par reptils dans le forum Windows
    Réponses: 2
    Dernier message: 13/07/2006, 20h49
  4. probleme avec les hook windows
    Par stone dans le forum Windows
    Réponses: 1
    Dernier message: 30/12/2005, 10h49
  5. Accès à l'évènement "OnAuthorize" via les hooks
    Par mchicoix dans le forum XMLRAD
    Réponses: 8
    Dernier message: 09/03/2005, 22h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo