Entwickler-Ecke
Dateizugriff - solange mein Progr läuft, soll kein anderes starten können
Pierre - Do 02.01.03 21:40
Titel: solange mein Progr läuft, soll kein anderes starten können
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. - So 05.01.03 15:23
schauen welche exe dateien laufen geht so:
http://www.swissdelphicenter.ch/de/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 :wink:
Fiji-Fighter
Delete - So 05.01.03 21:02
Und wenn er nicht das Hauptfenster der Anwendung erwischt, läuft der Prozess munter weiter.
Raphael O. - 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... :wink:
Fiji-Fighter
Delete - Mo 06.01.03 18:19
Ja aber nicht mit 100%-ger Sicherheit.
Raphael O. - Mo 06.01.03 18:35
warum nicht???
Delete - 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. - 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!!!!! :twisted:
Fiji-Fighter
Raphael O. - 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:
|
Quelltext
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 :wink: :wink:
Fiji-Fighter
Pierre - Mi 08.01.03 20:51
Hallo,
ich werde beide Wege ausprobieren.
Vielen Dank Pierre
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!