mingw will keine Hooks installieren



  • Hy,
    also ich habe irgendwie Probleme mit mingw. Ich wollte mit ihm einen Hook machen, der Systemübergreifend ist, aber irgendwie wird gar keiner erstellt. Hir mal der Quellcode der Problem verursachenden Funktion:

    hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD,
                                         KeyboardHookProc,
                                         hDllInstance,
                                         NULL
                                         );
    

    Mit dem Microsoft Compiler läuft alles mit dem Gleichen code wunderbar, aber mingw gibt mir folgende Fehler aus, die sich auf die Zeile mit "NULL" als Parameter beziehen:

    [Warning] passing NULL used for non-pointer argument passing 4 of `
    [Warning] argument to non-pointer type `long unsigned int' from
    

    Wenn ich "NULL" gegen "0" austausche, gibt es keine Probleme und alles läuft glatt. Bloß dass dann der Hook nicht installiert wird.
    Was kann man da machen?



  • Hallo,

    auf jeden Fall ist die Übergabe von Null (0) richtig, schließlich erwartet SetWindowsHookEx ein DWORD als letzten Parameter, und keinen Zeiger-Typ.

    Und wenn es trotzdem nicht läuft, dann gibt es geeignete Mittel festzustellen, warum nicht: den Rückgabewert von SetWindowsHookEx überprüfen, und wenn er NULL ist, dann mit GetLastError die Fehlerursache versuchen herauszubekommen.

    MfG



  • Als oden Rückgabewert von SetWindowsHookEx habe ich ja immer überprüft und der war NULL.
    Sprich die Funktion ist nicht geglückt. Nun überprüfe ich den Error Code folgendermaßen:

    []
    if (hKeyboardHook == NULL)
    {
    std::ofstream out("c:\\a.txt");
    out<<GetLastError();

    return FALSE;
    }
    [/]

    Das Problem ist, dass ich als ErrorCode "0" bekomme.

    Also nochmal. Mit Vc++6 und NULL als Parameter lief alles perfekt und mit mingw kriege ich erst gar nciht den Hook installiert.
    Wie kiregt man das mit mingw hin. Falls das noch was zu sagen hat, ich benutzt Dev-C++. Vielleicht könntet ihr mir ja auch einfach einen Quelltext mit 'nem funktionierendem Hook geben.Als oden Rückgabewert von SetWindowsHookEx habe ich ja immer überprüft und der war NULL.
    Sprich die Funktion ist nicht geglückt. Nun überprüfe ich den Error Code folgendermaßen:

    if (hKeyboardHook == NULL)
    {
        std::ofstream out("c:\\a.txt");
        out<<GetLastError();
    
        return FALSE;
    }
    

    Das Problem ist, dass ich als ErrorCode "0" bekomme.

    Also nochmal. Mit Vc++6 und NULL als Parameter lief alles perfekt und mit mingw kriege ich erst gar nciht den Hook installiert.
    Wie kiregt man das mit mingw hin. Falls das noch was zu sagen hat, ich benutzt Dev-C++. Vielleicht könntet ihr mir ja auch einfach einen Quelltext mit 'nem funktionierendem Hook geben.



  • ok, dann eine weitere Frage:

    du willst offensichtlich einen systemweiten Hook installieren, dazu muß die KeyboardHookProc in einer DLL liegen. Hast du eine DLL erstellt, in dem diese KeyboardHookProc liegt?

    Quelltexte mit Hooks solltest du im WinAPI-Forum finden, einfach einmal suchen, z.B. in den FAQ gibt es das hier:

    http://www.c-plusplus.net/forum/viewtopic.php?t=39383

    und sicher noch einige Beiträge, die nicht in den FAQ sind, aber mit einer Suche gefunden werden können.

    MfG



  • Das Problem ist, dass ich als ErrorCode "0" bekomme.

    Bin mir nicht sicher aber kann es sein, das sich der Rückgabewert von GetLastError auf

    std::ofstream out("c:\\a.txt");
    

    bezieht, da an der Stelle schon eine API Funktion aufgerufen wird? Versuch mal den Wert von GetLastError erst in ner Variable zu speichern und dann auszugeben.



  • Zu der 0 & dem NULL. Unter C gilt :

    #define NULL ((void*)0)
    

    Unter C++ ist es dann...

    #define NULL 0
    

    mfg h4xX0r


Anmelden zum Antworten