![]() |
Re: Window Handle
Du hast es doch schon da steheN.
Delphi-Quellcode:
Was willst du denn noch?
if Assigned(Memo) and (searchNr = gewuenschteNr) then
begin SendMessage(Handle, WM_GETTEXT, 0, Integer(PChar(Memo.Text))); Result := false; end |
Re: Window Handle
Delphi-Quellcode:
procedure TForm1.GetTextBtnClick(Sender: TObject); begin // Fenster suchen. iWindow := FindWindow(nil, PChar('entsprechende Fensterbezeichnung'); searchNr := 0; gewuenschteNr := 5; // ab hier möchte ich den Inhalt des Javafensters in ein Memo auf der Form schreiben also Memo.Lines.add wie setz ich das jetzt um ? |
Re: Window Handle
Ja, was meinst du, was der Quellcode macht?
|
Re: Window Handle
eben nicht ins memo schreiben warum auch immer
Delphi-Quellcode:
jetzt möchte ich aber das der Chatfensterinhalt (Text) diesmal (gewuenschteNr := 3) mit der Funktion GETTXT ausgelesen wird und in mein Memo1 auf meiner Form übergeben wird und das versuche ich die ganze zeit so // globale Variablen searchNr : Integer; gewuenschteNr : Integer; iWindow : THandle; function EnumWindowsProc(Handle: THandle; Edit: TEdit): Boolean; stdcall; begin if Assigned(Edit) and (searchNr = gewuenschteNr) then begin SendMessage(Handle, WM_SETTEXT, 0, integer(PChar(Edit.Text))); Result := false; end else begin Result := true; Inc(searchNr); end; end; //--------------------------------------------------------------------------------- procedure TForm1.SendBtnClick(Sender: TObject); begin // Fenster suchen. iWindow := FindWindow(nil, PChar('entsprechende Fensterbezeichnung'); searchNr := 0; gewuenschteNr := 5; //Editfeld vom Chatfenster (Handle) // damit sende ich den Text der bei mir im Edit1 steht an das Editfeld des Chatfensters und betätige dann die Entertaste // das funktioniert ja auch und der text wird gesendet EnumChildWindows(iWindow, @EnumWindowsProc, LongWord(Edit1)); SendMessage(iWindow,WM_KEYDOWN,VK_RETURN, 0); SendMessage(iWindow,WM_KEYUP,VK_RETURN, 0); end;
Delphi-Quellcode:
function GETTXT(Handle: THandle; Memo: TMemo): Boolean; stdcall; begin if Assigned(Memo) and (searchNr = gewuenschteNr) then begin SendMessage(Handle, WM_GETTEXT, 0, integer(PChar(Memo.Text))); Result := false; end else begin Result := true; Inc(searchNr); end; end; //--------------------------------------------------------------------------------- procedure TForm1.GetTXTBtnClick(Sender: TObject); begin // Fenster suchen. iWindow := FindWindow(nil, PChar('entsprechende Fensterbezeichnung'); searchNr := 0; gewuenschteNr := 3; //Memo (Chattext) vom Chatfenster (Handle) //so und ab hier gibt es Probleme ich weiß nicht genau wie ich die Funktion GETTXT aufrufen muss damit der Chatinhalt in mein Memo //geschrieben wird end; |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Sonstige Fragen zu Delphi" nach "Windows API / MS.NET Framework API" verschoben.
|
Re: Window Handle
Es gruselt mich. Habt ihr mal im MSDN geschaut wie die Parameter für wm_gettext lauten? Anstelle des Pointers auf den Buffer übergebt Ihr 0, und anstelle der maximal möglichen Länge des Buffers übergebt ihr die Adresse von Memo1.text.
Da "Text" ein Property ist geht derdirekte zugriff gar nicht sondern es muss auf eine zwischenvariable ![]() Ihr könnt aber auch gleich die Funktion GetWindowText nehmen, da haben die Parameter schon die richtigen Namen so das es dort einleuchtender sein sollte was ihr bisher falsch gemacht habt. [Edit]
Delphi-Quellcode:
wenn du unbedingt SendMessage verwenden willst dann so:
var lBuffer: String;
lSize : Integer; begin SetLength(lBuffer, 255); lSize := GetWindowText(Handle, @lBuffer[1], Length(lBuffer)); Memo1.Text := copy(lBuffer, 1, lSize);
Delphi-Quellcode:
[/Edit]
var lBuffer: String;
lSize : Integer; begin SetLength(lBuffer, 255); lSize := SendMessage(Handle, WM_GETTEXT, Length(lBuffer), Integer(@lBuffer[1])); Memo1.Text := copy(lBuffer, 1, lSize); |
Re: Window Handle
GetWindowText geht aber nur im eigenen Prozess:
Zitat:
|
Re: Window Handle
Ich hab die Erfahrung gemacht das GetWindowText auch für andere Prozesse funktioniert. War aber vermutlich früher mal anders und daher dieser Hinweis. Ansonsten hab ichs grad nochmal mit SendMessage ergänzt.
|
Re: Window Handle
Dazu noch in der Remarkssection:
Zitat:
|
Re: Window Handle
ok, dann würde man aber gar nicht ran kommen, auch nicht mit SendMessage außer man pflanzt sich in den anderen Prozess ein.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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