Nachricht an fremdes Childwindow -> klappt nicht
-
in der Funktion selber ( local ? ) ! so:
HWND Handle, Handle2 ;
-
Diese Zeile:
if( !Handle2 ) MessageBox(hWnd,_T("HANDLE2 ERROR"),0,0);ist ziemlich für den Popo, da sie dir nicht hilft. Warum lässt du dir nicht den letzten Fehler ausgeben? Dann weißt du wenigstens warum es nicht funktioniert.
-
also ich hoffe das ich das mit dem Fehler anzeigen hinbekommen habe:
case VK_RETURN: GetCursorPos(&curpos); // Mausposition ermitteln Handle = WindowFromPoint(curpos); if( !Handle ) MessageBox(hWnd,_T("HANDLE ERROR"),0,0); Handle2 = FindWindowExW(Handle, NULL, _T("Edit"), NULL); Error = GetLastError(); wsprintf(Buffer,_T("ErrorCode: %i"),Error); MessageBox(hWnd,Buffer,0,0); SendMessage (Handle2, WM_KEYDOWN, VK_DELETE, 1L); Error = GetLastError(); wsprintf(Buffer,_T("ErrorCode: %i"),Error); MessageBox(hWnd,Buffer,0,0);In der ersten MessageBox bekomme ich "Error Code" 0 -> alles in Ordnung ! ?
in der zweiten MessageBox "Error Code" 1400 -> ERROR_INVALID_WINDOW_HANDLE
1400 Invalid window handle. (bei msdn recherschiert )
-
Na bitte. Dann weißt du ja jetzt, was nicht stimmt und warum es nicht funktioniert. Es sollte dir jetzt also möglich sein den Fehler zu beheben.
-
nicht ganz, ich weis das Handle2 kein gültiger Handle ist, aber nicht was ich dagegen tun kann bzw. soll ....
Kannst du mir da weiterhelfen ? Habe ich FindWindowEx falsch benutzt oder nen anderen Fehler gemacht ? Ich wäre für weitere Hilfestellung sehr dankbar, da ich noch nicht sehr erfahren bin im Umgang mit Funktionen in Bezug auf (externe)Fenster
-
Verwende einfach GetDlgItem und hol Dir die ID über die Spy
.
-
Das Programm soll in Zukunft aber auch Nachrichten an andere Programme als Notepad senden und die haben für ihre Editfenster doch andere id's

Weis nicht jemand wie ich "einfach" den Fehler behebe oder was ich sonst machen könnte ?
-
hat keiner eine Hilfestellung für mich ?
-
Ist es möglich, dass WindowFromPoint() nur ein Handle auf das ganze Fenster, statt auf den Textbereich zurückgibt?! Wenn ja, dann kannst du im zweiten Schritt ja mal
HWND ChildWindowFromPoint(HWND hWndParent, POINT Point);probieren.
http://msdn2.microsoft.com/en-us/library/ms632676.aspx
Ich selber konnte es leider noch nicht testen.
-
Danke für den Tipp ich werds auf jedenfall probieren aber eigentlich müsste doch auch FindWindowEx funktionieren oder ?
-
Da ich es nicht selber ausprobiert hab bin ich mir nicht sicher, ob
WindowFromPoint()immer einen Handle auf das selektierte Subfenster zurück gibt oder nur auf das ParentWin und die MSDN hilft da auch nicht wirklich ("The WindowFromPoint function retrieves a handle to the window that contains the specified point."). Du könntest das natürlich überprüfen, in dem du dir einen Breakpoint auf
Handle2 = FindWindowExW(Handle, NULL, _T("Edit"), NULL);setzt und dann die ID des Fensters auf den Handle zeigt, mit der ID des Textfensters des Editors verlgeichst (mit Hilfe von Spy++).
Ein weitere Theorie ist, das die Fensterstruktur nicht linear aufgebaut ist. Diese Struktur kann man aber ebenfalls mit Spy++ ermitteln. Dass heißt, wenn Handle auf die gesamte Anwendung zeigt, kannst du dich auch mit den Funktion
HWND GetWindow( HWND hWnd, UINT uCmd );zum richtigen Subfenster "durchhangeln".
http://msdn2.microsoft.com/en-us/library/ms633515.aspx
Aber du hast natürlich recht, wenn Handle wirklich auf das Hauptfenster zeigt, dann sollte
FindWindowEx()auch den richtigen Handle liefern. Bist du dir sicher, dass die Klasse nach der er da suchen soll "Edit" heißt ?
-
Bist du dir sicher, dass die Klasse nach der er da suchen soll "Edit" heißt ?
Ich habe es aus einem Codeschnippsel kopiert, welches dem letzt gepostet wurde,
( es war eine ANtwort auf eine Frage ) und WinID (spy++ hab ich nicht gefunden) sagt mir auch das es sich um "Edit" Class handelt
-
und ich kann eine Nachricht an Hanldle senden -> wenn der Mauszeiger auf der Menü oder Titelleiste ist. Die ChildWindowFromPoint Funktion funktioniert scheinbar nicht ( ich habe auch mit ScreenToClient umgerechnet ).
-
Jetzt hast du mich aber schon neugierig gemacht.
Heute werd ichs nicht mehr schaffen, aber morgen probier ich das selber mal aus.
Ne neue Idee hab ich im Moment noch nicht.
-
Das ist nett ich weis ja nichtmal ob es an Notepad, am Programmcode oder an mir liegt das es nichts tut
-
und gibts schon neues ?
-
schade dass mir keiner helfen kann ...

-
"WindowFromPoint ()" liefert bereits das richtige Handle. Alles mit "Handle2" ist überflüssig.

-
Danke das mir das jetzt auch einer sagt ! :D:D:D
Ich melde mich mal wieder wenns dann noch immer nicht funzt
-
OK VIEEEEEEELEN DANK es klappt !!!!