Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   anderes .exe programm mittels OnClick beenden (https://www.delphipraxis.net/157779-anderes-exe-programm-mittels-onclick-beenden.html)

marco1204 24. Jan 2011 21:09

anderes .exe programm mittels OnClick beenden
 
Hallo alle zusammen.
Ich bin ein rellativer Delphi anfänger.
Ich will ein Programm, bei dem ich auf "blabla.exe starten" drücke, und somit dieses programm startet. Ich will es nutzen als zusammenstellung von Keybindern.
da hat mir google schon geholfen, das funktioniert auch
es erscheint ein Panel auf dem ich dann Informationen schreibe zu den Keybindern.
auf diesem Panel soll dann wieder ein Button sein mit dem ich dieses Programm "blabla.exe" wieder schließe.
aber wie mache ich das? google hat mich irgendwie nicht schlau gemacht.

Hier mein bissheriger Quelltext mit Rechner als Beispielprogramm:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellApi, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Panel1: TPanel;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Application.Handle,'open','calc.exe',''{Parameter},'c:\WinNT\System32',SW_SHOW);
  Panel1.Visible:=true
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
?
?
?
?
end;

end.
Die Fragezeichen sind halt das wo ich nicht weiter weiß.
hoffe ihr könnt helfen
danke im Vorraus ;-)

himitsu 24. Jan 2011 21:35

AW: anderes .exe programm mittels OnClick beenden
 
Das Programm, bzw. dessen Hauptfenster suchen und über dessen Handle das der Anwendungsagen es sollsich beenden.

PS: Hier im Forum suchenProgramm beenden / Hier im Forum suchenfremdes Programm beenden :zwinker:


Optimaler wäre es aber, wenn du MSDN-Library durchsuchenShellExecuteEx oder MSDN-Library durchsuchenCreateProcess verwendest, denn diese liefern dir ein Handle zur Anwendung.
(es könnte ja sein, daß die blabla.exe mehrmals aktiv ist ... welche soll dann beendet werden)

marco1204 25. Jan 2011 14:12

AW: anderes .exe programm mittels OnClick beenden
 
hm irgendwie werde ich nicht fündig.
also ich finde nur so riesen lange quelltexte?! und wenn ich die benutze funkt es auch nicht.
gibt es nicht irgendwie nen befehl den ich in OnClick einfüge, also nur so eine zeile oder so? also genauso wie ich das programm auch starte?!
also zumbeispiel so
close ('calc.exe') oder so ähnlich?!

DeddyH 25. Jan 2011 14:28

AW: anderes .exe programm mittels OnClick beenden
 
Klar, Du musst Dir nur eine entsprechende Routine schreiben.

marco1204 25. Jan 2011 14:31

AW: anderes .exe programm mittels OnClick beenden
 
wie meinst du das ich soll eine routine schreiben?!

Mein Motto: Überlasst alle das denken den Pferden, die haben nen größeren Kopf ;-)

DeddyH 25. Jan 2011 14:34

AW: anderes .exe programm mittels OnClick beenden
 
Mit der Einstellung wirst Du hier aber nicht weit kommen. Und mit Routine meine ich sowas:
Delphi-Quellcode:
procedure MachIrgendwasGanzTolles;
begin
  //ganz viel Quelltext
end;

procedure TFormTest.ButtonSuperClick(Sender: TObject);
begin
  MachIrgendwasGanzTolles; //nur eine Zeile nötig
end;

marco1204 25. Jan 2011 15:04

AW: anderes .exe programm mittels OnClick beenden
 
nein der staz war ja bloß spaß ;-)
ja ich hab schon verschiedenes ausprobiert. bloß auf keinen grünen zweig gestoßen

marco1204 25. Jan 2011 15:53

AW: anderes .exe programm mittels OnClick beenden
 
okay ich habe es jetzt hinbekommen. mittels:
SendMessage(FindWindow(nil,'Rechner'),WM_CLOSE,0,0 );

danke trotzdem für hilfe

DeddyH 25. Jan 2011 15:54

AW: anderes .exe programm mittels OnClick beenden
 
Einen Ansatz findest Du z.B. hier. Du müsstest lediglich die EnumWindowsProc dahingehend anpassen, dass sie das Fenster nicht nach vorn holt, sondern ihm ein WM_CLOSE schickt. Außerdem sollte Result in jedem Fall auf true gesetzt werden.

[edit] Mit Deiner Lösung schließt Du irgendein Fenster mit dem Titel "Rechner". Ob das aber das richtige ist, kannst Du nicht wissen. [/edit]

himitsu 25. Jan 2011 16:54

AW: anderes .exe programm mittels OnClick beenden
 
Zitat:

Zitat von DeddyH (Beitrag 1077235)
[edit] Mit Deiner Lösung schließt Du irgendein Fenster mit dem Titel "Rechner". Ob das aber das richtige ist, kannst Du nicht wissen. [/edit]

Darum ja auch der Hinweis
Zitat:

Zitat von himitsu (Beitrag 1077031)
Optimaler wäre es aber, wenn du MSDN-Library durchsuchenShellExecuteEx oder MSDN-Library durchsuchenCreateProcess verwendest, denn diese liefern dir ein Handle zur Anwendung.
(es könnte ja sein, daß die blabla.exe mehrmals aktiv ist ... welche soll dann beendet werden)

Wenn man sich das Fenster/Program gleich merkt, dann muß man es nicht suchen und es gibt keine Probleme, da man nichts Falsches finden kann.


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