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 :shock:

Verfasst: 04.02.2008 11:55
von Kiffi
bobobo hat geschrieben:ich hab aber linux :shock:
Mein Beileid!

Verfasst: 04.02.2008 11:57
von DarkDragon
bobobo hat geschrieben:ich hab aber linux :shock:
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?