Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fremde Anwendung ansteuern (https://www.delphipraxis.net/7080-fremde-anwendung-ansteuern.html)

Gast 4. Aug 2003 10:08

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:
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.
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.

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.

Alexander 4. Aug 2003 11:25

Re: Fremde Anwendung ansteuern
 
Kuck dir mal im MSDN WM_SETTEXT Message an.
Nachtrag:
Zitat:

Zitat von MSDN
An application sends a WM_SETTEXT message to set the text of a window.

Außerdem ein TEdit ist halt ein EDIT und kein BUTTON, sonst sollte der Quelltext so ungefähr der gleiche sein (habe ihn mir nicht so genau angekuckt.)

Gast 4. Aug 2003 11:45

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.

davtix 4. Aug 2003 16:49

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:

Assarbad 4. Aug 2003 17:42

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.

Gast 4. Aug 2003 18:59

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.

Assarbad 4. Aug 2003 19:14

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.

Gast 5. Aug 2003 07:21

Re: Fremde Anwendung ansteuern
 
Hallo Davtix 8)

natürlich zeige hier alles... sobald mir jemand hilft

Gruß

Paul Jr.

davtix 5. Aug 2003 10:26

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**

Luckie 5. Aug 2003 10:34

Re: Fremde Anwendung ansteuern
 
So schwer kann das doch nicht sein.
Delphi-Quellcode:
var
  s: String;
begin
  s := 'Hello World';
  SendMessage(hEdit, WM_SETTETXT, 0, Integer(@s[1]));
Trotzdessen, schließe ich mich Assarbad an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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-2025 by Thomas Breitkreuz