Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Text in ein fremdes Fenster an bestimmter Position (https://www.delphipraxis.net/89713-text-ein-fremdes-fenster-bestimmter-position.html)

simjoh 4. Apr 2007 16:33


Text in ein fremdes Fenster an bestimmter Position
 
Hallo,

ich möchte im geöffneten Fenster eines laufenden Programms einen Text an eine bestimmt Position setzten. Momentan mache ich das so, wobei der Text ('Hallo') in die Caption (warum auch immer gerade dorthin) des Fensters geschrieben wird (in FHWnd ist das Handle des Fensters gespeichert):

Delphi-Quellcode:
function FUNC_SendInput(const s: string):String;
begin
  if FHWnd=0 then
  begin
    Application.MessageBox(PChar('Fehler!'),'');
    exit;
  end;
  SetForegroundWindow(FHWnd);
 
  Sendmessage(fhwnd,WM_SETTEXT,0,Integer(PChar(s)));

end;

procedure TForm.Button1Click(Sender: TObject);
begin
  FUNC_SendInput('Hallo');
end;
Das funzt auch so, 'Hallo' erscheint im Fenster. Ich will es aber nicht in die Caption schreiben, sondern am liebsten per Koordinaten an eine bestimmt Stelle.
Kann mir jemand helfen?

Nette Grüße

Neutral General 4. Apr 2007 17:11

Re: Text in ein fremdes Fenster an bestimmter Position
 
Hi,

Also mit WM_SETTEXT kannst du nur den Text/Caption von Objekten mit Handle ändern. Was du machen könntest, ist das ganze mit Canvas zu "malen". Das Problem ist jedoch das das ganze einfach wieder übermalt wird bei der nächsten WM_PAINT Message an das Objekt...

So würde man das dann ungefähr machen:

Delphi-Quellcode:
var C: TCanvas;
begin
  C:= TCanvas.Create;
  C.Handle := GetDC(FHwnd);
  C.TextOut(x,y,Text);
  C.Free;
end;
Gruß
Neutral General

simjoh 4. Apr 2007 17:33

Re: Text in ein fremdes Fenster an bestimmter Position
 
Hallo,

danke sehr, das funzt so. Du hast aber natürlich recht, dass mein Text immer wieder überschrieben wird. Fällt da jemand noch ne andere Lösung ein oder kann man die genannte irgendwie ausbauen?

Grüße

shmia 4. Apr 2007 17:45

Re: Text in ein fremdes Fenster an bestimmter Position
 
Immer daran denken: sämliche Manipulation über Fensterhandles (zwwichen 2 versch. Anwendungen)
werden unter Windows Vista nicht mehr funktionieren! :warn:
SendMessage wird zwar ausgeführt, kommt aber bei der fremden Anwendung nicht an.

simjoh 4. Apr 2007 17:56

Re: Text in ein fremdes Fenster an bestimmter Position
 
Du meinst damit, Canvas ist die optimale Lösung?

toms 4. Apr 2007 17:59

Re: Text in ein fremdes Fenster an bestimmter Position
 
Zitat:

Zitat von shmia
Immer daran denken: sämliche Manipulation über Fensterhandles (zwwichen 2 versch. Anwendungen)
werden unter Windows Vista nicht mehr funktionieren! :warn:
SendMessage wird zwar ausgeführt, kommt aber bei der fremden Anwendung nicht an.

Hallo shima,

Kommt es nicht auch darauf an, was für ein UI privilege die Anwendung hat?
Siehe Webseiten-Titel"User Interface Privilege Isolation (UIPI)"

Zitat:

More specifically, applications in lower privilege modes cannot generally send messages to higher privileged applications unless the higher privileged application explicitly allows that message by calling ChangeWindowMessageFilter(). Similarly, lower privileged applications can read but cannot modify an HWND owned by higher privileged applications. For compatibility reasons, SendMessage and other APIs will return success even if the API was blocked because of privilege issues. Similarly, where compatibility impact is high and security risk is low sometimes low-privileged applications are allowed to send unsolicited messages to high privileged applications.

simjoh 4. Apr 2007 18:26

Re: Text in ein fremdes Fenster an bestimmter Position
 
Hat jemand noch ne Idee?

LizardKaiser 4. Apr 2007 18:36

Re: Text in ein fremdes Fenster an bestimmter Position
 
Timer + Zeichenoperation?

bitsetter 4. Apr 2007 18:43

Re: Text in ein fremdes Fenster an bestimmter Position
 
Hi,

es ist zwar nicht optimal aber eine andere Variante, mit dem TStaticText kann man ja auch Text anzeigen, du setzt ihn auf das fremde Fenster.

Delphi-Quellcode:
Windows.SetParent(Statictext1.Handle, FHWnd);

simjoh 4. Apr 2007 20:48

Re: Text in ein fremdes Fenster an bestimmter Position
 
Ja, Timer + Zeichnen geht auch, hab ich auch schon probiert, da flackerts aber so.

Zu dem anderen Vorschlag: Kannste nochmal was genauer erklären wie das geht?

Danke an alle.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz