| Autor |
Beitrag |
Pierre
      
Beiträge: 138
Win 98se und XP prof
D5Pers und D7Prof
|
Verfasst: Do 02.01.03 21:40
Hallo,
wie kann ich es einrichten, dass mein Programm erst alles abarbeitet und erst, wenn es sich beendet hat, sich ein anderes (fremdes) Programm starten läßt?
Gruß Pierre
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: So 05.01.03 15:23
schauen welche exe dateien laufen geht so: www.swissdelphicente.../showcode.php?id=616
die fremden exe Dateien schließen kannste dann so
Quelltext 1:
| PostMessage(FindWindow(nil,pchar('Delphi 5'),WM_CLOSE, 0, 0); |
du musst halt überprüfen was am anfang offen war und dann während dein programm läuft alles was neu läuft sofort wieder schließen
Fiji-Fighter
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 05.01.03 21:02
Und wenn er nicht das Hauptfenster der Anwendung erwischt, läuft der Prozess munter weiter.
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Mo 06.01.03 17:19
wenn es ein hauptfenster gibt, dann erwischt er es mit dieser methode auch...
andernfalls sollte sich wer was besseres ausdenken...
Fiji-Fighter
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 06.01.03 18:19
Ja aber nicht mit 100%-ger Sicherheit.
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Mo 06.01.03 18:35
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 06.01.03 18:48
Ja wenn er eben nicht das Hauptfenster erwischt. Wenn er bei ICQ nur ein Messagenfenster schließt., dann läuft der eigentliche Prozess noch weiter. Killt er aber den Hauptprozess (icq.exe) dann ist alles dicht.
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Mo 06.01.03 18:53
meine methode killt aber jedes Fenster, dass nach dem programmstart neu dazukommt...
wenn es also ein hauptfenster gibt, dann wird es auch gekillt!!!!!
Fiji-Fighter
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: Mi 08.01.03 14:56
Habe im Internet noch folgende Anleitung gefunden um auch Prozesse zu beenden:
| Zitat: |
Prozesse auflisten und beenden
Mit der nachfolgend aufgeführten Routinen können Sie die in einer Windowssitzung laufenden Prozesse aufzeigen und bei Bedarf auch entfernen. Hierfür benötigen Sie ein Formobject, ein ListViewobject und zu- mindest ein ButtonObject. Verknüpfen Sie das Buttonobject mit dem BtnRefreshClick damit gleich beim Start des Programms alle Prozesse angezeigt werden. Zum löschen eines Prozesses müssen Sie eine Verknüpfung zwischen DblClick des Listviewobject mit der Procedure ListviewDblClick. Wie aus den beigefügten Routinen ersichtlich, kann auch ein einzelner Prozess gesucht und terminiert werden. Die hierzu erforderlichen Schritte können aus der Refreshroutine entnommen werden. Wichtig ist die Einbindung der Unit TlHelp32 !
(Nur für Win95/Win98/ME)
Beispiel:
|
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| interface uses { . . . , } TLHelp32 { important ! }
// Global Variables , Globale Variablen
VAR aSnapshotHandle:THandle; aProcessEntry32:TProcessEntry32; procedure TFormMain.BtnRefreshClick( Sender:TObject); var i:integer; bLoop:BOOL; NewItem:TListItem; begin ListView.Items.Clear; aSnapshotHandle:=CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS,0); aProcessEntry32.dwSize:=Sizeof( aProcessEntry32); bLoop:=Process32First( aSnapshotHandle,aProcessEntry32); while integer( bLoop)<>0 do begin NewItem:=ListView.Items.add; NewItem.Caption:=ExtractFileName( aProcessEntry32.szExeFile); NewItem.subItems.Add( IntToHex( aProcessEntry32.th32ProcessID,4)); NewItem.subItems.Add( aProcessEntry32.szExeFile); ContinueLoop:=Process32Next( aSnapshotHandle,aProcessEntry32); end; CloseHandle( aSnapshotHandle); end;
procedure TFormMain.ListViewDblClick( Sender:TObject); var Ret:BOOL; PrID:integer;// processidentifier Ph:THandle;// processhandle begin try with ListView do begin if MessageDlg( 'Do you want to Terminate "'+ItemFocused.Caption+'"?'+^J+ 'posible the system is instabile or out of'+^J+ 'control......', mtConfirmation,[mbYes,mbNo],0)=mrYes then begin PrID:=StrToInt( '$'+ItemFocused.SubItems[0]); Ph:=OpenProcess( 1,BOOL( 0),PrID); Ret:=TerminateProcess( Ph,0); if Integer( Ret)=0 Then MessageDlg( 'Can Not Terminate "'+ItemFocused.Caption+'"',mtInformation,[mbOk],0) else ItemFocused.Delete; end; end; except end; end;
procedure TFormMain.FormCreate( Sender:TObject); begin // Application . OnHint := DisplayHint ; // If you want / need it . . . BtnRefreshClick( Sender); end; |
Vielleicht klappts, vielleicht aber auch nicht
Fiji-Fighter
|
|
Pierre 
      
Beiträge: 138
Win 98se und XP prof
D5Pers und D7Prof
|
Verfasst: Mi 08.01.03 20:51
Hallo,
ich werde beide Wege ausprobieren.
Vielen Dank Pierre
|
|