Autor | Thema: Ich will wissen, ob programme schon gestartet sind | | Datum:26.06.02 16:35 
(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
|
| | Datum:26.06.02 17:51 
(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
|
| | Datum:26.06.02 22:20 
(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
|
| | Datum:26.06.02 23:39 
(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
|
| | Datum: 27.06.02 19:50 
(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
|
|
|