![]() |
Re: Fremde Anwendung ansteuern
Hallo Christian :lol:
hervorragend!!! DANKE !!! 8) Ich habe das was Du mir gegeben hast mit anderen Sachen die ich im Internet gefunden habe etwas vermischt. Und das sieht jetzt so aus:
Code:
Im Hintergrund liegt ein Programm Test.Exe (auf d:\TEST\Test.exe) und wird hier aufgerufen. Anhand einer Caption von Tbutton wird der Tbutton lokalisiert und OnClick Ereignis ausgelöst.
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellApi; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} FUNCTION EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall; VAR szFull: array[0..MAX_PATH] of Char; //Buffer for window caption BEGIN Result := Wnd <> 0; if Result then BEGIN GetWindowText(Wnd, szFull, SizeOf(szFull)); // put window text in buffer if (Pos(SL[0], StrPas(szFull)) > 0) and // Test for text (SL.IndexOfObject(TObject(Wnd)) < 0) then // Test for duplicate handles SL.AddObject(StrPas(szFull), TObject(Wnd)); // Add item to list EnumChildWindows(Wnd, @EnumChildProc, Longint(SL)); //Recurse into child windows END; END; function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean; var SL: TStringList; H: hWnd; begin SL := TStringList.Create; try SL.AddObject(ButtonCaption, nil); // First item in list is text to find EnumChildWindows(ParentWindow, @EnumChildProc, Longint(SL)); H := 0; case SL.Count of 1: ShowMessage('Window text not found.'); 2: H := hWnd(SL.Objects[1]); else ShowMessage('Ambiguous text detected.'); end; finally SL.Free; end; Result := H <> 0; if Result then PostMessage(H, BM_CLICK, 0, 0); end; procedure TForm1.Button1Click(Sender: TObject); var hWindow : DWORD; hButton : DWORD; begin // Programm starten ShellExecute(0,'open','d:\Test\Test.exe',nil,nil,SW_NORMAL); // und auf das Handle des Fensters warten hWindow := 0; Sleep(1000); while hWindow = 0 do hWindow := FindWindow(nil,'TESTFORM'); // Die Child Windows durchgehen hButton := 0; IF hWindow <> 0 THEN ClickButton(hWindow,'TESTBUTTON'); END; end. Nun jetzt habe ich auf diesen Test-Formular noch eine Komponente TEdit hingelegt. Jetzt muss ich also auch die TEdit Komponente mit einem Text versehen (natürlich aus diesem Program hier her). Kann jemand diese hier oben genannte SourcCode vervollständigen... so das z.B. in dem TEdit dann ein Text ’HURRRA’ erscheint? Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
Kuck dir mal im MSDN WM_SETTEXT Message an.
Nachtrag: Zitat:
|
Re: Fremde Anwendung ansteuern
Hallo Alexander 8)
ich habe schon vorher geschrieben, dass ich hier überhaupt keine Ahnung habe... also entweder wird jemand von der Systemprofis mir weiter helfen (dessen bin ich mir irgendwie sicher) oder komme nicht weiter. Mit links kann ich mich jetzt nicht herumschlagen... da ich (noch) nicht die Abläufe die hier stattfinden richtig verstehe... Also BITTE keine Links... :freak: Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
wenn du den code zum ausfüllen des editfeld hast dann schreibst du ihn doch hier rein??? bitte denn da hänge ich auch gerade fest und ich brauch das unbedingt... danke im vorraus. dAb :angle:
|
Re: Fremde Anwendung ansteuern
Tragisch tragisch ....
Ich sage nur: Anwendungen, die gesteuert werden wollen, bieten eine OLE/COM Interface ... bei anderen sollte man es tunlichst vermeiden. Auch wenn Programme ala "WinAMP Remote Control" ja immer beliebter werden. Sowas sollte nur fuer Studienzwecke (Debugging, RE etc) oder in Ausnahmefaellen benutzt werden. |
Re: Fremde Anwendung ansteuern
Hallo Assarbad 8) ,
als ich noch Datenbank-Moderator in dem heute schon legenderem Delphi-Forum war wurde mir mal dein Name ins Ohr geflüstert. Schon damals wurdest Du als einer der besten System-Programmierer :coder: (wenn ich mich richtig erinnere) schlecht hin gehandelt... zugegeben nicht immer mit dem leichtestem Umgang...was mich überhaupt nicht gestört hat... Schade das Du heute für mich nur ein Hinweis auf ein Studiengang hast...da mein Herz schlug schneller als ich zuerst Dein Name in diesem Beitrag sah... schade... Vielleicht sind inzwischen auch neue Talente auf diesem Gebiet geboren, die diese Angelegenheit nicht so streng sehen wie Du... und mir weiter helfen würden... Herzliche Grüße :D Paul Jr. |
Re: Fremde Anwendung ansteuern
Hehe, ich bin geschmeichelt. Aber es war nur als Hinweis gedacht. Die Beispiele die dir oben geboten wurden, entsprechen doch eigentlich dem was du machen willst, oder hab ich da was verpasst?
Deinen Namen kenne ich uebr auch noch aus dem alten DF. |
Re: Fremde Anwendung ansteuern
Hallo Davtix 8)
natürlich zeige hier alles... sobald mir jemand hilft Gruß Paul Jr. |
Re: Fremde Anwendung ansteuern
das beruht auf gegenseitigkeit...
mal ein tip: vieleicht kannst du was mit dem quellcode von en_dis_able.exe (von assarbad) was anfangen. mit dem prog kann mann fremde formen min, max, schliessen, und zeigen und verstecken(visible:=true false) und der liest auch die button.caption edit.text usw. das hat ja fast mit dem zu tun nur ne kleine veränderung mit WM_SETTEXT und das soll funzen... so sagt ein gemeiner kumpel der auch der meinung ist das jeder selbst seinen hirn kurz vor einer explosion bringen soll 'dann lernt mann besser, wenn mann gerade vorm kollaps die lösung bekommt'. jedoch wer nicht weiss wies funzt kann sich kaum einen klugen kopf drüber machen um evtl. was neues zu .... :coder: **dAb** |
Re: Fremde Anwendung ansteuern
So schwer kann das doch nicht sein.
Delphi-Quellcode:
Trotzdessen, schließe ich mich Assarbad an.
var
s: String; begin s := 'Hello World'; SendMessage(hEdit, WM_SETTETXT, 0, Integer(@s[1])); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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-2025 by Thomas Breitkreuz