Delphi-PRAXiS
Seite 1 von 5  1 23     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 1. Aug 2003 08:03


Fremde Anwendung ansteuern
 
Hallo 8)

ich muss aus meiner Anwendung eine (ganz einfache) andere fremde Anwendung starten
(nur ein Formular mit einem Edit-Feld und einem Button.
Ich muss in das Edit dann automatisch was schreiben und den OnClick des Buttons
auslösen.

Geht das überhaupt?

Gruß

Paul Jr.

Alexander 1. Aug 2003 08:11

Re: Fremde Anwendung ansteuern
 
Klar geht das.
Zum Starten kannst du Shellexecute nehmen oder CreateProcess, siehe dazu auch die Code-Library.
Zum Steuern selber kannst du dir ja mal das hier ankucken:
http://www.delphipraxis.net/internal...fremder+button
Für's edit kannst du ja mal selber suchen :-)
Das wurde schon einige mal hier besprochen...

Gast 1. Aug 2003 08:28

Re: Fremde Anwendung ansteuern
 
Danke Alexander :D ,

ich werde am Wochenende ausprobieren ob ich mit dem Problem irgendwie
zu Recht komme.
Falls nicht melde ich mich nächste Woche noch einmal zur Wort

Gruß

Paul Jr.

Gast 1. Aug 2003 08:59

Re: Fremde Anwendung ansteuern
 
Schon ein erstes Problem :oops:

wie bekomme ich die Handle der Fremder Anwendung um diese dann
z.B. an solche Funktion:

function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean;

weiter geben?

Gruß

Paul Jr.

APP 1. Aug 2003 09:25

Re: Fremde Anwendung ansteuern
 
Hallo,
suche mal nach Hier im Forum suchenFindWindow
und wähle z.B. http://www.delphipraxis.net/internal...ght=findwindow

Gast 2. Aug 2003 08:40

Re: Fremde Anwendung ansteuern
 
Hallo APP und andere System Profis 8)

Wie ich sehe hier gibt’s absolute Profis in diesem für mich ganz neuem Bereich.

Ich bräuchte nur den Übergang zwischen:

1.) Ein fremder Programm automatisch öffnen
2.) Seine Handle dann herausholen (ich kapiere es hier nicht)
3.) Diese auf die genannte Funktion übergeben

function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean;

Es muss ein Program Test.Exe gestartet werden und ein Button angeklickt werden... sonnst nicht...Es dürfte für Euch ungefähr so schwer sein wie für mich z.B. ein berechnetes Feld zu sortieren (Datenbanken)

Wäre sehr Dankbar. Die Links sind zwar schön und gut... blicke ich aber nicht...

Gruß

Paul Jr.

Hansa 2. Aug 2003 09:01

Re: Fremde Anwendung ansteuern
 
Wie wärs denn mit
Delphi-Quellcode:
ShellExecute
? Vielleicht reicht das ja schon.

Gast 2. Aug 2003 10:18

Re: Fremde Anwendung ansteuern
 
Lieber Hansa :D

Du bist doch ein Datenbank-Profi so weit ich weiß... lass es gut sein...

Das ist natürlich nicht das was ich brauche...Wie man startet weiß ich schon...

Gruß

Paul Jr.

Hansa 2. Aug 2003 10:26

Re: Fremde Anwendung ansteuern
 
Zitat:

Zitat von Paul Jr.
Lieber Hansa :D

... lass es gut sein...

Paul Jr., kennst Du das Sprichwort "Auch ein blindes Huhn findet mal ein Korn ?" :lol: Irgendwann hänge ich mit so was bestimmt auch fest, deswegen verfolge ich das. :mrgreen:

Christian Seehase 2. Aug 2003 15:14

Re: Fremde Anwendung ansteuern
 
Moin Paul jr.,

vielleicht kommst Du ja mit diesem Beispiel weiter.

Dieses Beispiel setzt voraus, dass der anzuklickende Button die Klasse BUTTON hat, und nicht beispielsweise TButton oder vielleicht noch ganz anders. Ausserdem gehe ich hier davon aus, dass das Hauptfenster auf jeden Fall gefunden werden kann, da ich keine Absicherung treffe, für den Fall, dass das Fenster nicht da ist (dann läuft die Routine in eine Endlosschleife!)

Das Beispiel ist ungetestet, sollte aber funktionieren.

Delphi-Quellcode:
// Für den Aufbau dieser Funktion siehe EnumChildProc im PSDK
// Der 1. Parameter ist das Handle des gerade gefundenen Child Window
// Der 2. Parameter kann beliebig verwendet werden.
// Ich übergebe hier die Adresse einer Variablen vom Typ DWORD, in der dann,
// wenn der Button gefunden wurde, dessen aktuelles Handle zurückgegeben wird

function FindButton(const AhWindow : DWORD;const ApButton : PDWORD) : longbool; stdcall;

var
  pCaption : PChar;
  dwLen   : DWORD;

begin
  // True => Nächstes Child verarbeiten, soweit noch vorhanden
  Result := true;
  // Prüfen, ob das gefundenen Childwindow ein BUTTON ist
  pCaption := AllocMem(255);
  try
    // Klassenname konnte nicht ausgelesen werden, dann fertig
    if GetClassName(AhWindow,pCaption,255) = 0 then exit;
    // Ist kein Button, dann fertig
    if trim(UpperCase(pCaption)) <> 'BUTTON' then exit;
  finally
    FreeMem(pCaption,255);
  end;
  // Captionlänge auslesen, und entsprechend Speicher reservieren
  // (+1 wg. der terminierenden Null, da WM_GETTEXTLENGTH die Länge
  //  ohne diese zurückgibt)
  dwLen := SendMessage(AhWindow,WM_GETTEXTLENGTH,0,0);
  pCaption := AllocMem(dwLen+1);
  try
    // Caption auslesen
    SendMessage(AhWindow,WM_GETTEXT,dwLen,lParam(pCaption));
    // ist es nicht die gesuchte Caption dann fertig
    if AnsiUpperCase(trim(pCaption)) <> 'BUTTON CAPTION' then exit;
    // False => Nicht weitersuchen, da Button gefunden
    Result := false;
    // Das Handle des Button zurückgeben
    ApButton^ := AhWindow;
  finally
    FreeMem(pCaption,dwLen+1);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);

var
  hWindow : DWORD;
  hButton : DWORD;

begin
  // Programm starten
  ShellExecute(0,'open','Pfad der Exedatei',nil,nil,SW_NORMAL);
  // und auf das Handle des Fensters warten
  hWindow := 0;
  while hWindow = 0 do hWindow := FindWindow(nil,'Titel des zu suchenden Fensters');
  // Die Child Windows durchgehen
  hButton := 0;
  EnumChildWindows(hWindow,@FindButton,integer(@hButton));
  // Wenn hButton <> 0 ist, wurde der Button gefunden
  if hButton = 0 then exit;
  // und kann angeklickt werden
  SendMessage(hButton,BM_CLICK,0,0);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:53 Uhr.
Seite 1 von 5  1 23     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