Fürs 1. brauchen wir:
Delphi-Quelltext
Und dann weiter mit:
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:
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:
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 ...