Senden Von text nach delphi, macht er nicht wo liegt der...
-
Hi.
Ich kann mit diesem src, leider keine msg zu einem Delphi text fenster "Edit" senden.
Ich bräuchte mal eure hilfe.
Cu
#include <stdio.h> // standard-io #include <windows.h> // windows-sdk für SendMessage() und FindWindows() #include <stdlib.h> #include <string.h> #include <iostream.h> HWND FindDebugWindow() { HWND notepad = FindWindow(0, "Knudda"); if (notepad) return FindWindowEx(notepad, 0, "Edit", 0); // Edit-Control finden else return 0; // notepad nicht aktiv } int main () { // reinschreiben SendMessage(FindDebugWindow(), EM_REPLACESEL, TRUE, (LPARAM)"ein text der hinzugefügt wird"); return 0; }
-
Du könntest es mal über WM_SETTEXT versuchen
-
Die Fensterklasse des Editors ist TEditControl und das ist ein Kindfenster von einem TXTabControl. Ich würde sagen, dein Handle stimmt schlicht und ergreifend nicht.
-
Kannst du mir ein anderens Handle name sagen das gehen könnte ?
-
Luckie hat doch schon die Klassennamen geschrieben (ich gehe mal davon aus, dass die stimmen) - demnach musst du zweimal FindWindowEx nacheinander aufrufen
-
flenders schrieb:
Luckie hat doch schon die Klassennamen geschrieben (ich gehe mal davon aus, dass die stimmen) - demnach musst du zweimal FindWindowEx nacheinander aufrufen
Wie soll ich das 2 mal aufrufen ?
Also TEditControl scheint falsch zu sein , da er da immer noch nix reinschreibt:
#include <stdio.h> // standard-io #include <windows.h> // windows-sdk für SendMessage() und FindWindows() #include <stdlib.h> #include <string.h> #include <iostream.h> HWND FindDebugWindow() { HWND notepad = FindWindow(0, "Knudda"); // notepad-fenster finden if (notepad) return FindWindowEx(notepad, 0, "TEditControl", "TEditControl"); // Edit-Control finden else return 0; // notepad nicht aktiv } int main () { SendMessage(FindDebugWindow(), WM_SETTEXT, TRUE, (LPARAM)"ein text der hinzugefügt wird"); return 0; }
-
Sofern Lucki Recht hat (kannst du ja auch mit Spy++ bzw. WinSpector nachprüfen) ist TEditControl kein direktes Child des Haupfensters - außerdem: warum gibst du TEditControl sowohl für den Klassen-Namen als auch den Fenster-Titel an
Du musst also im ersten FindWindowEx-Aufruf das Handle des TXTabControl-Childs ermitteln und dann im zweiten Aufruf damit an das TEditControl-Hanlde zu kommen. Die Fehlerprüfung der Übersichtlichkeit mal weggelassen:HWND hWnd = FindWindow(0, "Knudda"); hWnd = FindWindowEx(hWnd, 0, "TXTabControl", NULL); hWnd = FindWindowEx(hWnd, 0, "TEditControl", NULL); return hWnd;
-
Also, senden tut er immer nocht nichts, könnte es vielleicht auch an der SendMessage liegen ? Das ich den text falsch angegeben habe ?
-
flenders schrieb:
Sofern Lucki Recht hat [...]
Ich habe Recht ;), ich habe hier Delphi und ich habe es nachgeprüft. Nur konnte ich das Parent von TEditControl nicht ermitteln.
-
Luckie schrieb:
flenders schrieb:
Sofern Lucki Recht hat [...]
Ich habe Recht ;), ich habe hier Delphi und ich habe es nachgeprüft. Nur konnte ich das Parent von TEditControl nicht ermitteln.
Könntest du dein src posten, womit du die eingabe sendest ?
-
Hast du mal dir Richtigkeit des Handle mit einer anderen Funktion getestet - z.B. ShowWindow oder DestroyWindow o.ä.
-
Sheppard schrieb:
Luckie schrieb:
flenders schrieb:
Sofern Lucki Recht hat [...]
Ich habe Recht ;), ich habe hier Delphi und ich habe es nachgeprüft. Nur konnte ich das Parent von TEditControl nicht ermitteln.
Könntest du dein src posten, womit du die eingabe sendest ?
Warum Source posten, wen nich mit einem Tool die fensterklassen ausfindig gemacht habe?
Hättest du übrigens auch selber machen können.
-
flenders schrieb:
Hast du mal dir Richtigkeit des Handle mit einer anderen Funktion getestet - z.B. ShowWindow oder DestroyWindow o.ä.
Also, ich hab
int main () { HWND hWnd = FindWindow(0, "Knudda"); hWnd = FindWindowEx(hWnd, 0, "TXTabControl", NULL); hWnd = FindWindowEx(hWnd, 0, "TEditControl", NULL); ShowWindow(hWnd, SW_HIDE); SendMessage(hWnd, WM_SETTEXT, TRUE, (LPARAM)"ein text der hinzugefügt wird"); return 0; }
Versucht, geht aber nicht. Ich kann das fenster nicht verstecken weder noch text senden
-
Schau doch bitte endlich mal nach (mit Spy++ oder WinSpector) wie genau die einzelnen Childs verschachtelt sind - heißt dein Hauptfenster auch wirklich "Knudda"?
-
flenders schrieb:
Schon doch bitte endlich mal nach (mit Spy++ oder WinSpector) wie genau die einzelnen Childs verschachtelt sind - heißt dein Hauptfenster auch wirklich "Knudda"?
Ja das programm heisst Knudda, wenn ich SW_HIDE aufs fenster machen, verschwindet das, das heisst das es wohl richtig ist.
-
1.) Bekommst du von FindWindowEx gültige Handles?
2.) Was sagt GetLastError?
3.) Sind die Childs wirklich so verschachtelt, wie angenommen (mit Spy++ oder WinSpector nachprüfen)?
-
Ich hab mal den Prozess namen ausfindig gemacht: "TfrmChat"
ich probiere mal getlast error
So:HWND hWnd = FindWindow("TfrmChat" ,0); ShowErrorMsg(GetLastError()); SendMessage(hWnd, WM_SETTEXT, TRUE, (LPARAM)"Knuddel"); ShowErrorMsg(GetLastError()); hWnd = FindWindowEx(hWnd, 0, "TXTabControl", NULL); ShowErrorMsg(GetLastError()); // <--- Hier kommt Das systen kann die angegebene datei nicht finden hWnd = FindWindowEx(hWnd, 0, "TEditControl", NULL); ShowErrorMsg(GetLastError()); // <--- Hier kommt Das systen kann die angegebene datei nicht finden SendMessage(hWnd, WM_SETTEXT, TRUE, (LPARAM)"ein text der hinzugefügt wird"); ShowErrorMsg(GetLastError()); // <--- Ungültiges Fenster Handle
-
sag mal, willst du in das CodeEdit-Fenster von der Delphi IDE Text schreiben oder an ein Edit von einem mit Delphi erstellten Programm?
-
Luckie schrieb:
mit Delphi erstellten Programm?
An einem Delphi erstellten programm.
-
Hmpf. Dann sind meine genannten Fensterklassen natürlcih höchst wahrscheinlich falsch. Das sind die Fensterklassen vom Delphi Editor. Sag mal hat es dichnicht gewundert, dass ich dir Fensterklassen nennen, obwohl ich gar nicht weiß von was für einen Programm du redest?