Seite 1 von 2
Abfragen, ob Programm schon geöffnet wurde
Verfasst: 04.02.2008 11:06
von Thomas
Wie würdet ihr abfragen, ob ein Programm schon geöffnet wurde?
-kann man z.B. abfragen, ob das "C:\Programme\Programm.exe" läuft (also den ganzen Pfad)?
Re: Abfragen, ob Programm schon geöffnet wurde
Verfasst: 04.02.2008 11:14
von Kiffi
Thomas hat geschrieben:-kann man z.B. abfragen, ob das "C:\Programme\Programm.exe" läuft (also den ganzen Pfad)?
http://www.purebasic.fr/german/viewtopi ... 485#165485
Grüße ... Kiffi
Verfasst: 04.02.2008 11:52
von bobobo
ich hab aber linux

Verfasst: 04.02.2008 11:55
von Kiffi
bobobo hat geschrieben:ich hab aber linux

Mein Beileid!
Verfasst: 04.02.2008 11:57
von DarkDragon
bobobo hat geschrieben:ich hab aber linux

Ausgabe vom Befehl "ps ax" parsen.
Hab das Beispiel aus der Hilfe unter RunProgram mal verändert:
Code: Alles auswählen
Prg = RunProgram("ps", "ax", "", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler
While ProgramRunning(Prg)
Output$ + ReadProgramString(Prg) + Chr(13)
Wend
Output$ + Chr(13) + Chr(13)
Output$ + "Exitcode: " + Str(ProgramExitCode(Prg))
EndIf
MessageRequester("Output", Output$)
Verfasst: 04.02.2008 13:27
von NicknameFJ
@Thomas
Oder meinst Du ob Dein eigenes Prg. schon läuft ? - dann würde ich es mit einem Mutex abfragen
Grüße
Joachim
Verfasst: 04.02.2008 14:06
von gnasen
Code: Alles auswählen
Procedure EinmaligerStart(EinmaligerName.s)
hTargetSem.l = CreateSemaphore_(0, 0, 1, @EinmaligerName); semaphore erstellen
If hTargetSem <> 0 ; prüfen ob semaphor schon im system vorhanden
If GetLastError_() = #ERROR_ALREADY_EXISTS ; semaphore is schon im system vorhanden
MessageRequester("Hinweis","Es kann immer nur eine Instanz des Programms gestartet werden!",#MB_ICONINFORMATION)
End
EndIf
EndIf
EndProcedure
EinmaligerStart("IrgendwasWasGarantiertNichtDoppeltKommtHierHin")
hab ich hier irgendwo mal im Forum gefunden.
Verfasst: 04.02.2008 19:47
von Thomas
Also, ich versuchs mal zu erklären:
ich möchte ganz einfach was machen, dass wenn mein prog schon läuft es nicht nocheinmal gestartet werden kann.
Verfasst: 04.02.2008 20:08
von bobobo
hmm .. folgendes checkt auch ein Laufen unter einem anderen UserAccount
(dafür reicht so 'n semaphore nicht ganz)
(hannich irjendwo in enne delphiforum jefunden und 'ne eck anjepaas)
Code: Alles auswählen
;folgende 2 Prozeduren entstammen dem Forum
;http://www.purebasic.fr/german/viewtopic.php?t=3928&start=0&postdays=0&postorder=asc&highlight=guid+erzeugen
Procedure.s Uni2Ansi(*Unicode.l)
size.l = WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, #Null, #Null, #Null, #Null)
ansi.s=Space(size)
WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, @ansi, size, #Null, #Null)
ProcedureReturn ansi
EndProcedure
Procedure.s GUIDcreate()
g.GUID
If CoCreateGuid_(@g) = #S_OK
unicodeGUID$ = Space(78)
GUIDLen = StringFromGUID2_(g, @unicodeGUID$, Len(unicodeGUID$))
ansiGUID$ = Left(Uni2Ansi(@unicodeGUID$), GUIDLen-1)
EndIf
ProcedureReturn ansiGUID$
EndProcedure
MMFName.s = Guidcreate() ;guiderzeugen
MMFHandle.l
LastError.w
;initialization
MMFHandle = OpenFileMapping_(#FILE_MAP_ALL_ACCESS, #False, MMFName);
LastError = GetLastError_()
If MMFHandle <> 0
MessageRequester("ohoo","Diese Anwendung wird bereits ausgeführt.",0)
EndIf
If (MMFHandle = 0) And (LastError = #ERROR_ACCESS_DENIED)
MessageRequester("ohooo","Diese Anwendung wird bereits unter einem anderem Benutzerkonto ausgeführt.")
EndIf
If (MMFHandle = 0) And (LastError = #ERROR_FILE_NOT_FOUND)
MMFHandle= CreateFileMapping_($FFFFFFFF, #NUL, #PAGE_READWRITE, 0, 1, MMFName)
MessageRequester("ahaaa","isch füül misch so jooot")
End
EndIf
If MMFHandle <> 0
CloseHandle_(MMFHandle)
EndIf
Verfasst: 04.02.2008 20:44
von Thomas
ganz so kompliziert muss es doch garned sein ...
kann man nicht einfach abfragen, ob eine Exe mit den einem bestimmtem Pfad gerade läuft?