AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi RunProcess mit Benachrichtigung beim Beenden
Thema durchsuchen
Ansicht
Themen-Optionen

RunProcess mit Benachrichtigung beim Beenden

Ein Thema von Shaman · begonnen am 10. Mär 2005 · letzter Beitrag vom 26. Mär 2005
Antwort Antwort
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#1

RunProcess mit Benachrichtigung beim Beenden

  Alt 10. Mär 2005, 11:59
Hallo zusammen

Gibt es bei CreateProcess auch eine Möglichkeit, über ein Callback oder Event benachrichtigt zu werden, wenn der Prozess beendet wird anstatt einfach nur darauf zu warten?

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#2

Re: RunProcess mit Benachrichtigung beim Beenden

  Alt 11. Mär 2005, 01:09
Zitat von Shaman:
Gibt es bei CreateProcess auch eine Möglichkeit, über ein Callback oder Event benachrichtigt zu werden, wenn der Prozess beendet wird anstatt einfach nur darauf zu warten?
Nein. So eine Callback Nachricht gibt es nicht. Kannst es aber mit Hilfe eines Thread selbermachen. Das könnte im Groben dann so aussehen:

Delphi-Quellcode:
unit Unit1;

interface

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

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

  TRunProcessThread = class(TThread)
  private
    FFileName: String;
    FOnProcessExit: TNotifyEvent;
    procedure UpdateVCL;
  protected
    procedure Execute; override;
  public
    constructor Create;
    property FileName: String read FFileName write FFileName;
    property OnProcessExit: TNotifyEvent read FOnProcessExit write FOnProcessExit;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TRunProcessThread }

constructor TRunProcessThread.Create;
begin
  inherited Create(True);
end;

procedure TRunProcessThread.Execute;
var
  SI: TStartupInfo;
  PI: TProcessInformation;
begin

  FillChar(SI, SizeOf(TStartupInfo), 0);
  SI.cb := SizeOf(TStartupInfo);
  if CreateProcess(nil, PChar(FFileName), nil, nil, False, 0, nil, nil, SI, PI) then
  begin
    WaitForSingleObject(PI.hProcess, INFINITE);
    if Assigned(FOnProcessExit) then
      Synchronize(UpdateVCL);
    CloseHandle(PI.hProcess);
    CloseHandle(PI.hThread);
  end;

end;

procedure TRunProcessThread.UpdateVCL;
begin
  FOnProcessExit(Self);
end;

{ TForm1 }

procedure TForm1.RunProcessExit(Sender: TObject);
begin
  ShowMessage('Programm wurde beendet');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

  with TRunProcessThread.Create do
  begin
    FreeOnTerminate := True;
    OnProcessExit := RunProcessExit;
    FileName := 'C:\WINDOWS\SYSTEM32\NOTEPAD.EXE';
    Resume;
  end;

end;

end.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: RunProcess mit Benachrichtigung beim Beenden

  Alt 11. Mär 2005, 10:02
Hoi

An einen Thread habe ich auch gedacht, wollte nur wissen, ob es noch etwas anderes gibt. Aber vielen Dank

Gruss
Shaman
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#4

Re: RunProcess mit Benachrichtigung beim Beenden

  Alt 26. Mär 2005, 20:26
Wer behauptet denn, daß man nur synchron auf das Ende des Prozesses warten kann? Schau dir doch die Funktionsbeschreibungen der in beliebigen Beispielen zum Thema verwendeten API-Funktionen mal näher an. Und selbst synchron geht asynchron indem das Warten in einen Thread ausgelagert wird ...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 Uhr.
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