Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Window Handle (https://www.delphipraxis.net/71908-window-handle.html)

Luckie 23. Jun 2006 11:37

Re: Window Handle
 
Du hast es doch schon da steheN.
Delphi-Quellcode:
if Assigned(Memo) and (searchNr = gewuenschteNr) then
  begin
    SendMessage(Handle, WM_GETTEXT, 0, Integer(PChar(Memo.Text)));
    Result := false;
  end
Was willst du denn noch?

delphiUser88 23. Jun 2006 11:43

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 ?

Luckie 23. Jun 2006 12:10

Re: Window Handle
 
Ja, was meinst du, was der Quellcode macht?

delphiUser88 23. Jun 2006 12:32

Re: Window Handle
 
eben nicht ins memo schreiben warum auch immer

Delphi-Quellcode:

// 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;
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

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 23. Jun 2006 13:08

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Sonstige Fragen zu Delphi" nach "Windows API / MS.NET Framework API" verschoben.

SirThornberry 23. Jun 2006 13:14

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
MSDN-Library durchsuchenwm_gettext
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:
var lBuffer: String;
    lSize : Integer;
begin
  SetLength(lBuffer, 255);
  lSize := GetWindowText(Handle, @lBuffer[1], Length(lBuffer));
  Memo1.Text := copy(lBuffer, 1, lSize);
wenn du unbedingt SendMessage verwenden willst dann so:
Delphi-Quellcode:
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);
[/Edit]

Luckie 23. Jun 2006 13:29

Re: Window Handle
 
GetWindowText geht aber nur im eigenen Prozess:
Zitat:

GetWindowText cannot retrieve the text of a control in another application.

SirThornberry 23. Jun 2006 13:32

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.

Luckie 23. Jun 2006 13:48

Re: Window Handle
 
Dazu noch in der Remarkssection:
Zitat:

If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message to be sent to the specified window or control. If the target window is owned by another process and has a caption, GetWindowText retrieves the window caption text. If the window does not have a caption, the return value is a null string. This behavior is by design.
Es mag sein, dass es funktioniert, aber man sollte sich nicht darauf verlassen.

SirThornberry 23. Jun 2006 13:57

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.
Seite 2 von 5     12 34     Letzte »    

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