Autor Beitrag
highhatcompy
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
BeitragVerfasst: Fr 20.08.04 23:05 
Hallo, ich hab da mal wieder ein Prob :oops: !
Ich arbeite an ein Backupprog und will wenn mein Masterprogramm beendet ist das Backup starten!

1. Wie kann ich feststellen ob mein Masterprog noch läuft oder beendet ist?

2. Wie hindere ich den Anwender Windows zu beenden solange das Backup läuft?

Wäre für Hilfe dankbar! :D

Grüße aus Thüringen

Highhatcompy


Moderiert von user profile iconTino: Topic aus CLX / Delphi Language (Object-Pascal) verschoben am Mo 23.08.2004 um 10:19

_________________
Bist Du ein Programmierer, so wirst Du gegen Computer, Hardwarehersteller und Anwender verlieren. (Quelle: Murphy's Computer-Gesetz)
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Sa 21.08.04 13:01 
Zu erstens: Du kannst z.B. den Prozess von deinem "Masterprogramm" überwachen. Stichworte Process32First und Process32Next. Wenn du ein Beispiel brauchst, sag bescheid. ;-)

Zu zweitens: Du kannst die Windows-Message WM_QUERYENDSESSION abfangen.

Gruß,
Jörg
highhatcompy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
BeitragVerfasst: Sa 21.08.04 23:53 
Hallo und Danke für Deine Antwort :D !
Für ein Beispiel wäre ich Dir echt Dankbar, weil mit so etwas habe ich mich noch nicht beschäftigt.
Vieleicht hast Du ja auch ein Beispiel für WM_QUERYENDSESSION !? :D

Grüsse von mir

HHC

_________________
Bist Du ein Programmierer, so wirst Du gegen Computer, Hardwarehersteller und Anwender verlieren. (Quelle: Murphy's Computer-Gesetz)
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: So 22.08.04 08:52 
Fürs 1. brauchen wir:
ausblenden Delphi-Quelltext
1:
2:
uses
  TLHelp32;


Und dann weiter mit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function IsProcessRunning(s : string) : Boolean;
var
  h : THandle;
  p : TProcessEntry32;
  b : Boolean;
begin
  Result:=False;
  h:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  p.dwSize:=SizeOf(h);
  b:=Process32First(h,p);
  while b do
  begin
    if ExtractFileName(p.szExeFile) = s then
    begin
      Result:=True;
      Break;
    end;
    b:=Process32Next(h,p);
  end;
  CloseHandle(h);
end;

Als weitere Möglichkeit könntest du auch eine Message festlegen, die du im Masterprogramm an dein zweites Programm schickst, wenn es geschlossen wird.

Nun zu 2.: Die Message kannst du ganz normal abfangen wie jede andere Message auch:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
type
  TForm1 = class(TForm)
  private
    procedure WMQueryEndSession(var msg : TWMQueryEndSession);message WM_QUERYENDSESSION;
  end;

Ausgeführt wird dann:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.WMQueryEndSession(var msg : TWMQueryEndSession);
begin
  msg.Result:=0;
end;

Indem du das Result auf 0 setzt, sagst du Windows, dass deine Anwendung nicht beendet werden kann.

So, das Ganze passt vielleicht eher ins WinAPI-Forum ...
highhatcompy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win2000,Win XP,Linux(SuSE9.2)
Delphi 5 Prof.
BeitragVerfasst: So 22.08.04 14:10 
Hi,
echt super Deine Beispiele! Danke!
Aber ich kann Dein 2. Bsp. nicht nutzen weil das "Masterprog" nicht von mir geschrieben wurde(es ist eine Prozesssteuerungssoftware). Dein 1. Code hilft mir aber weiter!

Danke und viele Grüße

Highhatcompy

_________________
Bist Du ein Programmierer, so wirst Du gegen Computer, Hardwarehersteller und Anwender verlieren. (Quelle: Murphy's Computer-Gesetz)