![]() |
Fensterinhalt eines anderen Programm übernehmen
Hallo zusammen,
Ich würde gerne aus einem anderen Programm etwas übernehmen, was dort im Fenster steht oder auch den ganzen Fensterinhalt. Ich habe den Name des Fensters. Kann man irgendwie nach dem man das Fenster gefunden hat den text als string oder ähnliches bekommen? lg wallwriht |
AW: Fensterinhalt eines anderen Programm übernehmen
Hallo,
Sofern das Control ein Handle besitzt mit SendMessage + WM_GETTEXT. |
AW: Fensterinhalt eines anderen Programm übernehmen
Zitat:
mit: sendmessage(handle); oder wie? lg |
AW: Fensterinhalt eines anderen Programm übernehmen
Guck dir die Hilfe zu WM_GETTEXT im MSDN an (
![]() |
AW: Fensterinhalt eines anderen Programm übernehmen
Zitat:
|
AW: Fensterinhalt eines anderen Programm übernehmen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); var textlength: Integer; wnd:hwnd; pcwintext:pchar; begin wnd:= Findwindow(nil,'was auch immer'); Memo1.Text:=gettext(wnd); end; function Tform1.GetText(Wnd: HWND): string; var textlength: Integer; Text: PChar; begin textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0); if textlength = 0 then Result := '' else begin GetMem(Text, textlength + 1); SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text)); Result := Text; FreeMem(Text); end; end; das hab ich jtztmal klappt aber nicht in dem Sinne in dem ich es Will. Wenn ich zB ICQ bei findwindow reinschreib kommt im Memo ICQ raus aber da soll ja der Fensterinhalt rauskommen... wie mache ich das? |
AW: Fensterinhalt eines anderen Programm übernehmen
Lad Dir
![]() |
AW: Fensterinhalt eines anderen Programm übernehmen
Zitat:
|
AW: Fensterinhalt eines anderen Programm übernehmen
Die Nummer ist (hoffentlich) das Handle, welches Du für WM_GETTEXT verwenden kannst.
|
AW: Fensterinhalt eines anderen Programm übernehmen
Zitat:
Delphi-Quellcode:
function Tform1.GetText(Wnd: HWND): string; var textlength: Integer; Text: PChar; begin textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0); if textlength = 0 then Result := '' else begin GetMem(Text, textlength + 1); SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text)); Result := Text; FreeMem(Text); end; end; Das ist die Funktion mit der ich das gettext benutzen will. das Ergebnis ist aber ''; also leer. |
AW: Fensterinhalt eines anderen Programm übernehmen
Und Du hast auch ganz sicher das richtige Handle? Bist Du einmal durchgesteppt und hast Dir die aktuellen Werte angeschaut?
|
AW: Fensterinhalt eines anderen Programm übernehmen
Mit FindWindow findest du nur das Toplevelfenster eine Memo ist aber kein Toplevelfenster. Wenn du das Handle hast, musst du mit FindWindowEx das Handle des Childwindows finden und dieses dann für SendMessage verwenden.
|
AW: Fensterinhalt eines anderen Programm übernehmen
Deshalb ja mein Tipp mit WinSpy.
|
AW: Fensterinhalt eines anderen Programm übernehmen
Zitat:
Wie kann ich das zwischendrin nachkucken wie im obigen Post erwähnt? |
AW: Fensterinhalt eines anderen Programm übernehmen
Zeig einmal den Code, den WinSpy generiert hat.
|
AW: Fensterinhalt eines anderen Programm übernehmen
Delphi-Quellcode:
procedure Tform1.findit;
var wndMain, wndChild: HWND; begin wndMain := FindWindow('ThunderRT6FormDC','ICQ Status Checker v.1.7.3'); if wndMain <> 0 then begin wndChild := FindWindowEx(wndMain, 0, 'ThunderRT6Frame', nil); wndChild := FindWindowEx(wndChild, 0, 'ThunderRT6PictureBoxDC', nil); wndChild := FindWindowEx(wndChild, 0, 'ThunderRT6Frame', nil); wndChild := FindWindowEx(wndChild, 0, 'ThunderRT6PictureBoxDC', nil); if wndChild <> 0 then begin ShowMessage('Window Handle: ' + IntToStr(wndChild)); // FlashControl(wndChild); // internal function end; end; Memo1.Text:=gettext(wndchild); end; |
AW: Fensterinhalt eines anderen Programm übernehmen
PictureBox? Das klingt fast so, als wäre das kein WinControl in dem Sinne, sondern der Text wird zur Laufzeit "gemalt". Das ist aber nur eine Vermutung.
|
AW: Fensterinhalt eines anderen Programm übernehmen
Zitat:
Also: DeddyH hatte recht, das lag daran das es eine Picturebox ist. Mit nem Edit klappts super. Kann ich nicht irgendwie den Text aus ner Picturebox auch rausholen... Is ja praktisch wie ein canvas text out was ich einlesen will..... |
AW: Fensterinhalt eines anderen Programm übernehmen
Vielleicht lässt sich das auch lösen, wenn ich irgendwie die Farben in der Picturebox rausbekommen könnte, also ob es grün gibt oder ähnliches... gibt es das?
|
AW: Fensterinhalt eines anderen Programm übernehmen
Ich fürchte, Du unterschätzt den Aufwand. Um den Text herauszubekommen, bräuchtest Du ja ein OCR.
|
AW: Fensterinhalt eines anderen Programm übernehmen
Zitat:
|
AW: Fensterinhalt eines anderen Programm übernehmen
Du könntest einen Screenshot des Controls machen und per Scanline nach der Farbe suchen. Dabei musst Du natürlich eine gewisse Farbtoleranz mit einbeziehen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz