Keyboard hook???



  • Hat zu diesem Zeitpunkt hDllInstance einen gültigen Wert? Hast du exakt den Code aus den FAQ übernommen?



  • ich hab exakt den code vom faq
    und hDllInstance hat da 0 😞 😞



  • Kommt er denn in den DLL_PROCESS_ATTACH Zweig?



  • ne kommt nie dahin kommt auch nich in int APIENTRY DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)



  • Aber du hast beim Erstellen des Projektes schon ausgewählt, dass du eine "Win32 Dynamic-Link Library" erstellen willst, oder?



  • ja klar wie konnt ichs dann wissen das es da nich hin kommt



  • Was meinst du 😕 Auf jeden Fall scheinst du irgend etwas falsch zu machen 🤡



  • ja aber was



  • ich gib mal meine ganze dll

    // hookdll.c 
    
    // Der Keyboardhook wird beim aufruf die Funktion SetupHook (HWND) 
    // vom Hauptprogramm aus gesetzt. Dabei wird das Fensterhandle des 
    // aufrufendes Programms an die Funktion übergeben. Als Ergebnis 
    // sendet die hookdll.dll über die Funktion KeyboardHookProc 
    // jedes mal wenn eine Taste betätigt wird eine Nachricht 
    // vom Typ (WM_USER + 2) an das Hauptprogramm. Dabaei steht der 
    // Tastencode der gedrückten Taste in dem Paramter "wParam". 
    // Wenn der Hook nicht mehr benötigt wird, löscht man ihn über die 
    // Funkion UninstallHook () 
    
    #include <windows.h> 
    #include <stdio.h> 
    #include "hookdll.h"    /* -> Siehe Oben */ 
    
    // Weise den Compiler an, die Variable hWindow in einem 
    // separaten Abschnitt namens Shared unterzubringen 
    // Darüber hinaus ist dann auch noch dem Linker mitzuteilen, 
    // dass die Daten in diesem Abschnitt von allen Instanzen 
    // dieser Anwendung gemeinsam verwendet werden sollen. 
    // Ganz wichtig dabei ist, dass die Variablen initialisiert 
    // sein müssen. 
    
    #pragma data_seg ("Shared") 
    HWND hWindow = 0 ; 
    #pragma data_seg () 
    
    // Weise den Compilern, den Abschnitt Shared als lesbar, 
    // beschreibbar und zur gemeinsamen Verwendung zu deklarieren - "RSW". 
    
    #pragma comment (linker, "/section:Shared,RWS") 
    
    LRESULT CALLBACK KeyboardHookProc (int, WPARAM, LPARAM) ; 
    // Der Prototyp der Funktion KeyboardHookProc 
    
    HHOOK       hhkHook ; 
    HINSTANCE   hDllInstance ; 
    // Definition globaler Variablen 
    
    /************************************************************************/ 
    /* DllMain: wird automatisch aufgerufen, wenn die DLL mit LoadLibrary() */ 
    /*          geladen, oder mit FreeLibrary wieder freigegeben wird.      */ 
    /* Eingabe Parameter: Systemspezifische Daten                           */ 
    /* Return-Wert: TRUE                                                    */ 
    /************************************************************************/ 
    
    int APIENTRY DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
    { 
        MessageBox(NULL,"in main",0,0);
        switch (fdwReason){ 
            case DLL_PROCESS_ATTACH : 
                // Die DLL wird in den Adressraum des aktuellen Prozesses 
                // eingeblendet. 
                hDllInstance = hInstance ; 
    
                MessageBox(NULL,,"DLL_PROCESS_ATTACH???",0,0);
                // Initialisierung der globalen Variable 
                break ; 
        }   
        return TRUE ; 
    } 
    
    /***********************************************************/ 
    /* SetupHook: EXPORT Funktion, setzt den Keyboardhook      */ 
    /* Eingabe Parameter: HWND des aufrufenden Fensters        */ 
    /* Return-Wert: TRUE                                       */ 
    /***********************************************************/ 
    
    EXPORT BOOL CALLBACK SetupHook (HWND hParent){ 
        hWindow = hParent ; 
        char buf[100];
        sprintf(buf," hDllInstance=%d",hDllInstance); 
        MessageBox(NULL,buf,0,0);
    
       // SendMessage ((HWND) hWindow, (WM_USER + 2), (WPARAM) "test", (LPARAM) NULL) ; 
        // Initialisierung der globalen Variable mit dem Eingabe Parameter 
        hhkHook = SetWindowsHookEx (WH_KEYBOARD, KeyboardHookProc, hDllInstance,0);
        if(hhkHook==NULL)
        {
           int error=GetLastError();
           sprintf(buf," getlasterror=%d",error) ; 
           MessageBox(NULL,buf,0,0);
           return 0;
        }
        // Keyboardhook setzen und das Ergebnis in der globalen Variable 
        // hhkHook speichern. 
        return TRUE ; 
    } 
    
    /*******************************************************************/ 
    /* KeyboardHookProc: wird jedes mal aufgerufen, wenn eine Taste    */ 
    /*                   betätigt wird                                 */ 
    /* Eingabe Parameter: Systemspezifische Daten                     */ 
    /* Return-Wert: s. u.                                              */ 
    /*******************************************************************/ 
    
    LRESULT CALLBACK KeyboardHookProc (int nCode, WPARAM wParam, LPARAM lParam){ 
    
       //  hWindow = FindWindow(NULL,"Windows App") ; 
         MessageBox(NULL,"hier",0,0);
    
        if (nCode == HC_ACTION){ 
        // Verhindern das eine Nachricht mehrmals verarbeitet wird. 
            if ((lParam & 1073741824) != 1073741824){ 
    
            // Überprüfen ab vor dem Aufruf dieser Funktion die Taste bereits gedrückt war 
                SendMessage ((HWND) hWindow, (WM_USER + 2), (WPARAM) wParam, (LPARAM) lParam) ; 
                // Senden der Nachricht (WM_USER + 2) und den Tastencode der gedrückten 
                // Taste (gespeichert in "wParam") an das in der globalen Variable 
                // hWindow gespeicherte Fensterhandle. 
            } 
        } 
        return CallNextHookEx (hhkHook, nCode, wParam, lParam) ; 
        // Die Nachrichten an den nächsten Hook weiterreichen. 
    } 
    
    /*********************************************************************/ 
    /* UninstalHook: EXPORT Funktion, löscht den über die Funktion       */ 
    /*               SetupHook gesetzten Hook                            */ 
    /* Eingabe Parameter: keine                                          */ 
    /* Return-Wert: TRUE                                                 */ 
    /*********************************************************************/ 
    
    EXPORT BOOL CALLBACK UninstallHook (void){ 
        UnhookWindowsHookEx (hhkHook) ; 
        // den in der globalen Variable hhkHook gespeicherten Hook löschen. 
        return TRUE ; 
    } 
    
    /////////////////////////////////////////////////////////////////////
    


  • hab den fehler gefunden lag am compiler!!!!



  • Hallo,

    ich habe das selbe Problem, das du gehabt hast, gargamel. Könntest du mir bitte sagen wie du es gelöst hast? Was genau war denn mit dem Compiler?


Anmelden zum Antworten