Erledigt! Wie prüfen ob ein bestimmtes Programm läuft?

Anfängerfragen zum Programmieren mit PureBasic.
EmmJott
Beiträge: 46
Registriert: 25.10.2024 12:23

Erledigt! Wie prüfen ob ein bestimmtes Programm läuft?

Beitrag von EmmJott »

Guude (wie man in Hessen so grüßt),

ich möchte den Start eines Programmes nur dann zulassen, wenn eine bestimmte Anwendung bereits gestartet ist bzw. das Programmen abbrechen, wenn diese bestimmte andere Anwendung nicht gestartet ist bzw. nicht mehr läuft (ggf. durch periodisches Prüfen). Wie macht man das?
Zuletzt geändert von EmmJott am 09.08.2025 12:51, insgesamt 1-mal geändert.
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Benutzeravatar
mk-soft
Beiträge: 3852
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Wie prüfen ob ein bestimmtes Programm läuft?

Beitrag von mk-soft »

Im englischen Forum findet man sowas (Wenn man weiss wonach man suchen muss ;)

Link: https://www.purebasic.fr/english/viewto ... 78#p640278

Update 64 bit

Code: Alles auswählen

Global FilePath$

Prototype.i GetModuleFileNameExW(hProcess,hModule,*lpFilename,nSize.i)
Prototype.i GetModuleFileNameExA(hProcess,hModule,*lpFilename,nSize.i)

Global GetModuleFileNameEx.GetModuleFileNameExW

Lib = OpenLibrary(#PB_Any,"psapi.dll")
If Lib
  Global GetModuleFileNameEx.GetModuleFileNameExW = GetFunction(Lib,"GetModuleFileNameExW")  
Else
  MessageRequester("Warning", "Can not load Psapi.dll" ,#MB_ICONWARNING)
  End  
EndIf

Procedure CheckRunningExe(Process$)
  Proc32.PROCESSENTRY32
  Proc32\dwSize = SizeOf(PROCESSENTRY32)   
  snap = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0) 
  If Snap
    If Process32First_(snap, @Proc32)
      While Process32Next_(snap, @Proc32)
        ImageName$ = PeekS(@Proc32\szExeFile)
        If LCase(ImageName$) = Process$   ;Your exe file name here in lower case characters 
          FilePath$ = Space(1024)
          hProcess = OpenProcess_(#PROCESS_ALL_ACCESS, 0, Proc32\th32ProcessID)
          If hProcess
            GetModuleFileNameEx(hProcess, 0, @FilePath$, Len(FilePath$))
            CloseHandle_(hProcess)
          EndIf
          Break
        EndIf            
      Wend
    EndIf
    CloseHandle_(Snap)
  EndIf
EndProcedure

CheckRunningExe("explorer.exe")
If GetPathPart(FilePath$) <> ""
  Debug "It's not a service"
  Debug FilePath$
Else
  Debug "It's a service"
EndIf 
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
jogo
Beiträge: 120
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: Wie prüfen ob ein bestimmtes Programm läuft?

Beitrag von jogo »

In Linux nutze ich via RunProgram() das Tool pgrep mit den Parametern -alf zu_prüfendes Programm
Im Terminal zum testen:

Code: Alles auswählen

pgrep -alf xed
xed ist hier in diesem Beispiel der Name eines Texteditors.
pgrep liefert (wenn xed gestartet) die PID und den Namen. Bei manchen Programmen noch mehr Infos (zB. Firefox). Wenn kein laufender Prozess für xed gefunden wurde, wird nix zurückgeliefert.
In Purebasic via RunProgramm():

Code: Alles auswählen

status = RunProgram("pgrep", "-alf xed", "",#PB_Program_Open | #PB_Program_Read) ;systemtool zum prüfen auf existierende programme starten
  Delay(50)                                                                      ;tick auf die antwort warten
  While AvailableProgramOutput(status)                                            ;läuft so lange, wie daten vorliegen
    txt = ReadProgramString(status)        
  Wend
  Delay(30)
  CloseProgram(status) ;datenverbindung trennen // beendigung nicht nötig, weil pgrep sich selbst beendet hat, wenn keine daten mehr kommen
wenn txt leer ist/bleibt, ist dein gewünschtes Programm (hier xed) nicht gestartet. Und wenn txt Text enthält, heißt das für dich, dass xed bereits läuft. Der Inhalt ist also für diesen Zweck unwichtig - du willst ja nur wissen, ob oder ob nicht...
Windows habe ich nicht, aber vermutlich gibt es dafür ein ähnliches Kommandozeilen-Tool.
Mit PureBasic direkt habe ich es nicht geschafft, bzw. ich habe dafür keine Funktion gefunden.

EDIT: ahh, hat sich überschnitten - mk-soft war schneller. Jo, dann hast ja auch gleich die perfekte Lösung für Windows :)
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
EmmJott
Beiträge: 46
Registriert: 25.10.2024 12:23

Re: Erledigt! Wie prüfen ob ein bestimmtes Programm läuft?

Beitrag von EmmJott »

Vielen Dank für Eure Hilfe!

Und ja - wenn man weiß, wonach man suchen muss, wird man auch fündig!
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Antworten