Abfragen, ob Programm schon geöffnet wurde

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Abfragen, ob Programm schon geöffnet wurde

Beitrag 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)?
v6.00
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Abfragen, ob Programm schon geöffnet wurde

Beitrag 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
a²+b²=mc²
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

ich hab aber linux :shock:
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

bobobo hat geschrieben:ich hab aber linux :shock:
Mein Beileid!
a²+b²=mc²
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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$)
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Beitrag 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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag 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.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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.
v6.00
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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

‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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?
v6.00
Antworten