Hook (Mir fällt nix kurzes ein...)



  • Also mein Problem:

    Nachdem ich mit UnhookWindowsHookEx den Hook entferne passiert es manchmal das der Hook an Anwendungen "kleben" bleibt - z.B. an Notepad.

    Manchmal muss man ~20 Sekunden warten bis die Dll "freigegeben" wurde oder ein paar Anwendungen schließen.
    Das tritt zwar selten auf, aber wenn es auftritt dann nervt es halt tierisch...
    Kennt da wer ne Lösung?

    Aso: Ist ein Systemweiter Maus-Hook.

    Danke schon mal...

    Code:

    bool Start()
    {
        return theHook == 0 &&
            0 != (theHook = SetWindowsHookEx(WH_MOUSE,MouseProc,dllInst,0));
    }
    
    bool Stop()
    {
        return theHook != 0 && UnhookWindowsHookEx(theHook);
    }
    

    [ Dieser Beitrag wurde am 28.10.2002 um 17:03 Uhr von Nemesyzz editiert. ]



  • Irgendwie habe ich den leisen Verdacht, daß die Variable 'theHook' nicht in einem shared Datensegment liegt. Könnte das vielleicht sein?

    BTW: Du solltest 'theHook' nach dem Aufruf von UnhookWindowsHookEx wieder auf NULL zurücksetzen, sicherheitshalber halt.



  • Die Variable ist shared.

    #pragma data_seg(".shared")
    
    HHOOK theHook = 0;
    
    DIR first = NONE;
    DIR second = NONE;
    POINT lastpt = {0, 0};
    
    HWND theWindow = 0;
    
    char Path[MAX_PATH] = { 0 };
    
    #pragma data_seg()
    

    An theHook sehe ich ja das die Dll noch nicht freigegeben wurde.
    Ich möchte ja nicht 2x den gleichen Hook am laufen haben...



  • Das reicht nicht, Du hast noch was vergessen:
    [cpp]
    .
    .
    .
    #pragma data_seg()
    #pragma comment(linker, "/SECTION:.shared,RWS")[/cpp]



  • Das ist bei mir in der .def Datei...

    LIBRARY Hook
    
    SECTIONS
       .shared READ WRITE SHARED
    

    [ Dieser Beitrag wurde am 29.10.2002 um 14:03 Uhr von Nemesyzz editiert. ]


Anmelden zum Antworten