Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 241062 (2498)
  Suchen
 Zurück zur Übersicht
 AutorThema: Ich will wissen, ob programme schon gestartet sind
Jörg Thorwesten
Datum:26.06.02 16:35 Antwortenals Email verschicken (info@jthorwesten.de) 


Hallo!

Ich habe folgendes Problem:

Mein Programm soll ein anders Programm starten. Aber wenn ich das Programm ein zweites Mal ausführe, soll es nicht nochmal das gleiche Programm starten. Das heißt, ich möchte verhindern, dass das gleiche Programm zwei mal gestartet wird.

Dafür muss ich aber prüfen, ob das Programm schon läuft (quasi den Task-Manager auslesen!). Wie mache ich das am besten? Oder geht das überhaupt?

Vielen Dank im Voraus

Jörg Thorwesten


Sven Schmidts
Datum:26.06.02 17:51 Antwortenals Email verschicken (schmidts@flat2serv.de) 


Hallo,

ich habe zwar keinen Quelltext zur Hand, aber such mal im Forum nach "Mutex". Du musst beim Start einen Mutex erzeugen und beim beenden wieder freigeben. Bekommst Du beim erstellen des Mutex eine Fehlermeldung, wurde er bereits erstellt, es läuft also bereits eine Instance.

Mfg.
Sven Schmidts


Gerd Telzerow
Datum:26.06.02 22:20 Antwortenals Email verschicken (GTelzerow@T-Online.de) 


Hi,

hier ein Quelltext!

Def CreateMutex(3) !"KERNEL32","CreateMutexA"
Def GetLastError(0) !"KERNEL32","GetLastError"
Def CloseHandle(1) !"KERNEL32","CloseHandle"

Declare MutexName#,Mutex&

Proc ProcStart
Declare error&,name$
'Ein Name
Let name$="Jörg Thorwesten"
Dim MutexName#,Add(Len(name$),1)
String MutexName#,0=name$
Let Mutex&=CreateMutex(0,1,Mutexname#)
Let error&=GetLastError()
Dispose MutexName#

If And(Neq(Mutex&,0),Equ(error&,0))
'Das Programm
Else
MessageBox("Das Programm ist schon aktiv","Programm Nam.",4112)
CloseHandle(Mutex&)
End
EndIf

Endproc

MFG Gerd


Jörg Sellmeyer
Datum:26.06.02 23:39 Antwortenals Email verschicken (joerse@gmx.de) 


Hallo,
Ganz simpel kannst Du Dir auch eine Liste mit AddWindows "" erstellen und feststellen,
ob der Fenstertitel Deines Programmes sich in der Liste befindet.
Gruß
Jörg


Bernhard Künzel
Datum: 27.06.02 19:50 Antwortenals Email verschicken (b.kuenzel@chello.at) 


Hallo Jörg,
wenn ich will, dass nur einmal das Programm gestartet werden darf, setze ich folgenden Programmcode ab der ersten Zeile, deshalb auch die Api-Aufrufe mit External
daher kann ich bedenkenlos das Programm sofort mit END beenden
'vor jeden anderen Programmcode einsetzen
Declare hM&,SymbName$
SymbName$="Irgendeinname"'hier wird der gewünschte Name eingesetzt
hM&=External("KERNEL32","CreateMutexA",0,1,ADDR(SymbName$))
If External("KERNEL32","GetLastError") = $B7 'ERROR_ALREADY_EXISTS
MessageBox("Das Programm läuft schon !","Meldung",16)
External("KERNEL32","CloseHandle",hM&)
End
EndIf

Gruß
Bernhard




 Zurück zur Übersicht