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 TLMDEdit und WM_SETTEXT (https://www.delphipraxis.net/149468-tlmdedit-und-wm_settext.html)

paperboy 22. Mär 2010 01:40


TLMDEdit und WM_SETTEXT
 
hallo zusammen...

wie aus dem Titel ersichtlich versuche ich an eine Editbox einer fremden Anwendung einen Text zu schicken...
ich hab das schon des öfteren mit folgendem code hinbekommen:

Delphi-Quellcode:
var WinHandle, EditHandle : THandle;
begin
  WinHandle := FindWindow(nil, 'Anwendung');
  EditHandle := FindWindowEx(WinHandle, 0, 'Edit', nil);
  SendMessage(EditHandle, WM_SETTEXT, 0, Integer(PChar('Test')));
end;
das hat auch immer gut geklappt...
in diesem Fall ist das Editfeld jedoch ein TLMDEdit (mit WinSpy ausgelesen)...
ich bekomme zwar ein gültges Handle (mit WinSpy überprüft) die Message kommt jedoch nicht durch...
SendMessage liefert 1 zurück und auch ein aufruf von SysErrorMessage(GetLastError) sagt "Der Vorgang wurde erfolgreich beendet"..

zu erwähnen wäre vllt noch das das Editfeld auf einem TLMDPanelFill liegt...
hab mal versucht an den Button (auch ein TLMDButton) der auch auf dem selben Panel liegt eine Nachricht zu schicken
(PostMessage(ButtonHandle, BM_CLICK, 0, 0)) und diese kommt an :roll:

vllt hat ja jemand einen Rat wie man da eventuell ans Ziel kommen kann...

lg paperboy

paperboy 23. Mär 2010 11:00

Re: TLMDEdit und WM_SETTEXT
 
*push*

DeddyH 23. Mär 2010 11:02

Re: TLMDEdit und WM_SETTEXT
 
Falls Du die Sourcen hast, schau doch mal nach, ob das TLMDEdit einen Eventhandler für WM_SETTEXT implementiert hat.

paperboy 23. Mär 2010 12:24

Re: TLMDEdit und WM_SETTEXT
 
hey DeddyH,

danke für die Antwort,
die LMD-Komponenten sind zwar Freeware werden aber nur mit dcu Dateien aausgeliefert...
also leider auch keine Chance da nach zu schauen...

vllt noch einen Vorschlag was man da tun könnte? Wenn nicht werde ich mich wohl damit abfinden müssen das die LMD-Tools entwickler nicht wollen das an ihre Editboxen nachrichten geschickt werden :roll:

lg paperboy

paperboy 23. Mär 2010 12:24

Re: TLMDEdit und WM_SETTEXT
 
upss da ist was schief gelaufen beim posten...
sorry... der post war unbeabsichtig...

Edit: ok da der Post schonmal hier ist noch ein kleiner Nachtrag:

hab grad Antwort vom Autor des Programms bekommen an das ich die Nachricht schicken will und er sagt er hat auch keinen extra Eventhandler für WM_SETTEXT eingebaut...

lg paperboy

DeddyH 23. Mär 2010 13:22

Re: TLMDEdit und WM_SETTEXT
 
Hmm... und Du bist wirklich sicher, dass Du das richtige Handle ermittelst? Kannst Du testhalber einmal versuchen, Dir mit GetDC den Devicecontext zu holen und auf dem Edit herumzumalen?

paperboy 23. Mär 2010 14:31

Re: TLMDEdit und WM_SETTEXT
 
jap das Handle stimmt... habs einerseits mit WinSpy überprüft und andererseits funktioniert es auch per Textout auf das Editfeld zu malen..
sowie in einer von mir erstellten Testanwendung als auch im Zielprogramm...

Delphi-Quellcode:
var
  WinHandle, EditHandle: hwnd;
  DC : HDC;
begin
  WinHandle := FindWindow(nil, 'TestApp');
  EditHandle := FindWindowEx(WinHandle, 0, 'TLMDEdit', nil);
  DC := GetDC(EditHandle);
  TextOut(DC, 0,0,'Hallo',5);
end;
wenn Textout doch nur wirklich einen Text setzen würde dann wäre ich jetzt fertig :wink:
ich schätze mal das wird wohl das Ende der Fahnenstange sein, oder?

lg paperboy

DeddyH 23. Mär 2010 14:34

Re: TLMDEdit und WM_SETTEXT
 
Im Moment gehen mir die Ideen aus :gruebel:

paperboy 23. Mär 2010 14:44

Re: TLMDEdit und WM_SETTEXT
 
hey DeddyH,

habs hinbekommen!
da das Editfeld ja beharrlich die WM_SETTEXT Nachricht ignoriert hab ich mir überlegt das ich meinen Text zuerst in die Zwischenablage kopiere und dann per WM_PASTE ins Editfeld einfüge... funktioniert prima :thumb:

Delphi-Quellcode:
var
  WinHandle, EditHandle: hwnd;
  Temp : String;
begin
  WinHandle := FindWindow(nil, 'TestApp');
  EditHandle := FindWindowEx(WinHandle, 0, 'TLMDEdit', nil);
  Temp := ClipBoard.ToString
  ClipBoard.AsText := 'Test';
  SendMessage(EditHandle, WM_PASTE, 0, 0);
  ClipBoard.AsText := Temp;
end;
vllt kanns ja mal jemand brauchen...
trotzdem vielen dank für deine hilfe DeddyH...

lg paperboy

Luckie 23. Mär 2010 14:48

Re: TLMDEdit und WM_SETTEXT
 
Zitat:

Zitat von paperboy
hey DeddyH,

habs hinbekommen!
da das Editfeld ja beharrlich die WM_SETTEXT Nachricht ignoriert hab ich mir überlegt das ich meinen Text zuerst in die Zwischenablage kopiere und dann per WM_PASTE ins Editfeld einfüge... funktioniert prima :thumb:

Mal sehen, wann die ersten Beschwerden von Benutzern kommen, wenn dein Programm den Inhalt der Zwischenablage zerschießt. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 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