Probelm mit der auswertung, der von KeyboardProc gesendeten parameter!, PLZ HELP
-
hae?
aber auch wenn ich in der dll WM_USER+2 angebe als message gehts net.
-
Ja ka kann ja auch mist erzählen

Hast du denn mal geguckt ob die Nachrichten überhaupt gesendet werden (Debugger; Messagebox ausgeben)? Und hast du mal geschaut was bei deinem Hauptprogramm überhaupt ankommt mit spy++ oder so?MfG schirrmie
-
T0bi schrieb:
glob_keymessi = RegisterWindowMessage( "WM_KEYMESSAGE_MSG" );
Lass mal die Headerdateien nach "WM_KEYMESSAGE_MSG" durchsuchen, dann steht da ungefähr:
#define FINDMSGSTRINGA "commdlg_FindReplace" #define WM_KEYMESSAGE_MSG "Schweine_im_Weltall"Dann klappts auch mit der Nachbarin.
-
ich hab keine ahnung wie ich prüfen soll ob da was passiert, und shcon gar net mit spy -.-
-
hab jetz mal in der if( nCode == HC_ACTION ) ne MsgBox rein gebaut... die theoretisch immer kommen müsste wenn ich ne taste drücke... tut sie aber net -.-
heisst das es kommt nix an und kann so au net gesendet werden?
aber wieso?
-
hallo?
-
Noch mal gaaaanz langsam zum mitschreiben:
Auf beiden Seiten musst Du RegisterWindowMessage verwenden. Also sowohl in Deiner EXE als auch in Deiner DLL.Statt switch musst Du in der EXE dann if (msg==g_dwMyWindowMsg) verwenden.
-
hm ok....
aber kann ich statt RegisterMessage auch in meiner DLL schreiben: in der KeyboardProcSendMessage( hWnd, ( WM_USER+2), wParam, lParam );
und dann in meiner main die WM_KEYMESSAGE mit WM_USER+2 definieren
und dann halt in meiner WinProc()
case WM_KEYMESSAGE:if( message == WM_USER+2 ) {
/auswertung
is das so richtig?
Gruß Tobi.
-
Du solltest über Prozessgrenzen hinweg keine WM_USER+x Nachrichten verwenden!
-
hm ok also doch RegisterMessage.
aber ich bin mir net sicher wo ich das hin schreibe in der exe
"if (msg==g_dwMyWindowMsg)"
waer net wenn de mir des au noch sagst.Gruß Tobi.
-
Wenn Du das nicht verstehst, solltest Du nicht mit Hooks anfangen...
SCNR
-
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:
//DLLEXPORT 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.htmldies 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 ?