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?
Erledigt! Wie prüfen ob ein bestimmtes Programm läuft?
Erledigt! Wie prüfen ob ein bestimmtes Programm läuft?
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!
Re: Wie prüfen ob ein bestimmtes Programm läuft?
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

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
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
-
- 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?
In Linux nutze ich via RunProgram() das Tool pgrep mit den Parametern -alf zu_prüfendes Programm
Im Terminal zum testen:
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():
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
Im Terminal zum testen:
Code: Alles auswählen
pgrep -alf xed
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
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
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Re: Erledigt! Wie prüfen ob ein bestimmtes Programm läuft?
Vielen Dank für Eure Hilfe!
Und ja - wenn man weiß, wonach man suchen muss, wird man auch fündig!
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!