Keyboard hook???



  • eben des geht ja auch nicht



  • gargamel schrieb:

    eben des geht ja auch nicht

    Doch! Du bist bloß so blöd, dass du nicht verstehst, was ich geschrieben habe. Sorry, aber das musste mal raus. Du sollst in der HookProc mit FindWindow nach dem Fenster suchen, an welches die Nachricht geschickt werden soll. Und dann sollst du das in SendMessage einsetzen. Man, man, man...



  • ebbbbeeennnnnnnnn deeeess kkkkkllllllllaapppppppppppttttt niiiiiiiccccccchhhhhtttt



  • Zeig deine HookProc!!!



  • aber ich hab rausgefunden das es in die funktion gar net kommt

    LRESULT CALLBACK KeyboardHookProc (int nCode, WPARAM wParam, LPARAM lParam){ 
        MessageBox(NULL,"hier",0,0);//kommt gar nicht
        hWindow = FindWindow(NULL,"Windows App") ;
        if (nCode == HC_ACTION){ 
               if ((lParam & 1073741824) != 1073741824){ 
          gedrückt war 
                SendMessage ((HWND) hWindow, (WM_USER + 2), (WPARAM) wParam, (LPARAM) lParam) ; 
              gedrückten 
                       } 
        } 
        return CallNextHookEx (hhkHook, nCode, wParam, lParam) ; 
     }
    

    is der fehler vielleicht hier drin???

    EXPORT BOOL CALLBACK SetupHook (HWND hParent){ 
        hWindow = hParent ; 
        MessageBox(NULL,"hier",0,0);//hier hin kommts
    
        hhkHook = SetWindowsHookEx (WH_KEYBOARD, KeyboardHookProc, hDllInstance,0) ; 
           return TRUE ; 
    }
    


  • Was liefert denn SetWindowsHookEx zurück? Falls NULL: Was sagt GetLastError()?



  • es kommt

    Cannot set nonlocal hook without a module handle 1428



  • und wie kannh ich des module handle bekommen???



  • 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