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



  • sagst dus mir jetzt oder nicht?
    jeder fängt mal klein an.



  • achja eine kleinigkeit haette ich dem noch hinzu zufügen:
    und zawr, wenn ich jetz in meiner switch( message ) in der WinProc unter
    case WM_KEYMESSAGE: nur SendMessage(...), soll einen string in eine listbox adden, schreibe dann wird aber NUR ein string geadded, wenn ich im fenster selbst bin, bin ich jedoch in einem fremden fenster oder desktop, dann passiert gar nichts. hmm also irgendwie passiert schon was nur noch net des richtige.



  • Du machst es einem ganz schön schwer eine korrekte Antwort zu geben.
    In diesem Forum gibt es bereits mehrere Threads zum Thema "KeyboardProc".
    Als Fehlerursache hat sich jedesmal herausgestellt, dass die Kontrolle oder Übersicht über das Programm verlorengegangen ist.

    Dein letzter Post deutet darauf hin, dass Du den Hook lokal und nicht global gesetzt hast.



  • 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.


Anmelden zum Antworten