Probelm mit der auswertung, der von KeyboardProc gesendeten parameter!, PLZ HELP



  • also ich bin der meinung das das global ist:
    //DLL

    EXPORT bool InstallHook( HWND hWnd ) {
    
        if( hWndDLL != 0 ) {
    
            return false;
        }
        else {
    
            hKeyHook = SetWindowsHookEx( WH_KEYBOARD, (HOOKPROC)KeyboardProc, hInst, 0 /* GLOBAL */ );
    
            if( hKeyHook != 0 ) {
    
                hWndDLL = hWnd;
            }
            else {
    
                return false;
            }
        }
        return true;
    }
    

    und in der main ruf ich diese funktion mit einem button auf.
    Gruß tobi.



  • Stimmt, ist global.

    T0bi schrieb:

    ...bin ich jedoch in einem fremden fenster oder desktop, dann passiert gar nichts.
    hmm also irgendwie passiert schon was nur noch net des richtige.

    Beschreib mal genauer was passiert und warum es nicht das richtige ist.



  • ich habe mir hier schon mal ein paar beiträge angeschaut, mit unter dieser hier
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-127046-and-highlight-is-keyboard+hook.html

    dies entspricht eigentlich genau meinem problem.
    Kurz:
    hat meine anwendung den focus bekommt sie die message, ist es miniminert oder nicht activewindow dann passiert nichts. der grund ist, dem thread nach, das man nicht einfach SendMessage benutzen kann um ueber 2processe zu kommunizieren.

    schade ist nur das in diesem thread keiner zu einer nun endgültigen lösung gekommen ist. es wurde von WM_DATACOPY und pipes gesprochen... aber ich habe davon keine ahnung und wuesste net wo ich diese einsetzen soll.

    hoffe einer von euch kann nun die lösung von diesem thread bringen, wär cool 🙂

    Gruß Tobi.



  • Laut Deiner Beschreibung scheint der Hook warum auch immer trotzdem lokal zu sein.
    Was passiert wenn Du im Hook statt SendMessage () MessageBox () benutzt ?
    Wird die wenigstens angezeigt wenn die Anwendung nicht aktiv oder minimiert ist ?



  • hmm wenn ich da ne msgbox rein baue passiert gar nicht -.- hmm wie gesagt es wird irgendwie net zum main window gesendet.



  • Ja, aber warum ? 🙂
    Wird die MessageBox angezeigt wenn die eigene Anwendung aktiv ist ?



  • nein wird sie nicht. hmmm was kann ich tun?
    muss ich pips oder WM_COPYDATA benutzen?

    Gruß Tobi.



  • Auch nicht wenn die eigene Anwendung den Fokus hat und eine Taste gedrückt wird ?



  • ne tut sich nix.



  • Wenn die eigene Anwendung den Fokus hat und SendMessage () funktioniert (wie Du weiter oben geschrieben hattest), aber MessageBox () nicht (wie Du jetzt geschrieben hast), dann liegt ein Fehler vor, der nicht gelöst werden kann.
    Sorry. 😞



  • wie es liegt ein fehler vor der nich gelöst werden kann?
    ich werd das jetzt mal mit pipes oder copydata versuchen... und wenns dann net klappt geb ichs auf.

    Gruß Tobi.



  • T0bi schrieb:

    wie es liegt ein fehler vor der nich gelöst werden kann?

    Aus Deiner Fehlerbeschreibung geht folgendes hervor :

    1. Wenn die eigene Anwendung den Fokus hat, dann funktioniert SendMessage ().

    2. Wenn die eigene Anwendung den Fokus hat, dann funktioniert MessageBox () nicht.

    Genau das ist der Fehler, der nicht gelöst werden kann : Es widerspricht sich.



  • aber mein hook baut doch genau so auf wie in der fasq ... und da sollte es doch auch funktionieren...



  • Der Widerspruch liegt hier :

    static LRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lParam ) { 
    ...
     if( nCode >= HC_ACTION ) { 
    
      SendMessage( hWndDLL, WM_KEYMESSAGE, (WPARAM)wParam, (long)lParam ); 
      MessageBox (0,"","",0); 
     } 
    ...
    }
    

    Wie kann es sein, dass
    -> SendMessage () nur funktioniert, wenn die eigene Anwendung den Fokus hat, aber
    -> MessageBox () nie ?



  • Haehhh ich verstehs net -.- also jetzt funktionierts.... sogar global...
    also die messagebox erscheint jetz... sogar wenn das fenster den focus net hat.



  • ---gestrichen---

    *EDIT* (Post nicht mehr notwendig)

    Hurra ! 🙂

    Dann nimm jetzt wieder SendMessage () im Hook und in der eignen Anwendung mit "WM_USER+2".



  • also ich habe mal geschaut. und ich finde die dll tatsächlich nur in meiner eigenen anwendung... aber denoch tauchen die MsgBoxen auf.



  • Die DLL müsste aber in jedem Prozess zu sehen sein, zumindest in allen, die von "explorer.exe" gestartet wurden.
    Tauchen die MsgBoxen auch auf, wenn Du zu einer anderen Anwendung wechselst ?



  • JA!, aber wie gesagt ich find die dll nicht in anderen processen.
    vllt. ist es noch interessant das die DLL GROß geschrieben wird in, da wo ich sie gefunden habe... aber eigentlich müsste sie ja klein geschrieben werden.



  • Die Namen der DLL's holt sich der Process Explorer immer aus dem "EXPORT"-Eintrag des "PE-Headers" der DLL.
    Der angezeigte Name muss nicht identisch sein mit dem Dateinamen der DLL.


Anmelden zum Antworten