Seite 1 von 1
PBOSL - AppRunning() immer 0
Verfasst: 23.03.2007 09:30
von Rico
Hallo,
ich wollte mit PB3_94 die Funktion AppRunning (PBOSL) dazu benutzen, um zu prüfen ob ein anderes Programm bereits bzw. ob es noch gestartet ist.
Egal was ich mache, die Funktion gibt mir immer 0 zurück - ob das Programm nun definitiv gestartet ist oder nicht ...
Code: Alles auswählen
If AppRunning("Testprogramm.exe")
MessageRequester("Läuft","Die Anwendung läuft")
Else
MessageRequester("Läuft nicht","Die Anwendung läuft nicht")
EndIf
End
Kann mir das jemand bitte erklären?
Gruß Rico
Verfasst: 23.03.2007 13:45
von bobobo
Ich hatte das mal benutzt .. da hatte ich als Parameter den komplette
ProgrammPfad mit übergeben .. aberso richtig glücklich hat mich das
nie gemacht
Für Windoof ab Nt geht es auch folgendermaßen und dann ohne Pfad
Code: Alles auswählen
ExamineProcesses()
While NextProcess()
If LCase(GetProcessName())="testprogramm.exe"
rennt=1
EndIf
Wend
If rennt
MessageRequester("Testprogramm","Läuft",0)
Else
MessageRequester("Läuft","Läuft nicht",0)
EndIf
Verfasst: 23.03.2007 13:54
von Rico
Naja, brauche das leider auch für Rechner mit Windows 98.
Habe mich jetzt noch etwas auf dem Board umgeschaut und einen Thread gefunden in dem Thorsten1867

mir eine Lösung bietet
siehe hier:
http://www.purebasic.fr/german/viewtopi ... findwindow
Gruß Rico
Verfasst: 23.03.2007 14:49
von ts-soft
Du solltest lieber den Mutex nutzen, das funktioniert dann genauso wie
AppRunning. Statt des Appnamen aber besser einen GUID String!
Code: Alles auswählen
Procedure OnlyOne(MutexName.s)
Protected result.l = CreateMutex_(0, 0, @MutexName)
If GetLastError_() = #ERROR_ALREADY_EXISTS
ReleaseMutex_(result)
CloseHandle_(result)
End
EndIf
ProcedureReturn result
EndProcedure
Define.l MyMutex = OnlyOne("{8134EB66-4D60-4E1E-8F0D-582E6173580C}"); Beispiel GUID, bitte selber eine erstellen
; am Programmende, das passiert bei der Lib automatisch, im Code muß man das leider manuell machen
CloseHandle_(MyMutex)
GUID erstellen:
Code: Alles auswählen
Procedure.s MakeGUID()
LBuffer.s = Space(76)
CoCreateGuid_(GuidId.GUID)
StringFromGUID2_(GuidId, LBuffer,76);
CompilerIf #PB_Compiler_Unicode
ProcedureReturn LBuffer
CompilerElse
SBuffer.s = Space(38)
WideCharToMultiByte_(0, 0, LBuffer, 76, SBuffer, 38, 0, 0);
ProcedureReturn SBuffer
CompilerEndIf
EndProcedure
Debug MakeGUID()
Verfasst: 23.03.2007 15:19
von bluejoke
Ich denke er benötigt diese Funktion für fremde Programme, nicht für eigene.
Verfasst: 23.03.2007 15:21
von ts-soft
bluejoke hat geschrieben:Ich denke er benötigt diese Funktion für fremde Programme, nicht für eigene.
Dann hab ich es verkehrt verstanden.
Dann sollte er lieber durch die Prozesse iterieren, das sollte ja auch
irgendwie unter Win9x möglich sein. FindWindow ist jedenfalls mit Vorsicht zu
geniessen, gibt schnell "Falschfindungen"

Verfasst: 23.03.2007 15:44
von bluejoke
Die Funktion von Thorsten überprüft doch die Prozesse, nicht die Windows - ganz unten, der letzte Post ist doch was Rico meint.
Verfasst: 23.03.2007 15:57
von ts-soft
bluejoke hat geschrieben:Die Funktion von Thorsten überprüft doch die Prozesse, nicht die Windows - ganz unten, der letzte Post ist doch was Rico meint.
Okay, gewonnen
Warum lädt er in dem Code die Kernel32.dll, sind doch alle API-Funktionen
verfügbar, oder soll das für eine Demo-Version sein?
Hab den Source dort mal überarbeitet

Verfasst: 23.03.2007 23:02
von Rico
Guten Abend,
bluejoke hat Recht - ich meinte den letzten Post in dem Beitrag.
Ich will ein Auto-Update in mein Programm integrieren und versuchte mich mit dem Code aus dem Thread
http://www.purebasic.fr/german/viewtopi ... r&start=10
(auch wieder der letzte Post). Dabei wird eben ein zweites Programm geladen und das eigentliche Programm muss beendet sein, damit die ganze Sache geht. Leider funzte das mit dem "If AppRunning=0" nicht, so dass ich einen Ersatz suchte.
MfG Rico
Verfasst: 13.11.2008 08:44
von saimen
Damit bin ich jetzt zufrieden:
Code: Alles auswählen
;Anwendung nur einmal starten zulassen
If AppRunning("anwendung.exe")
MessageRequester("Anwendung","Anwendung wurde bereits gestartet!",#MB_ICONASTERISK)
End
EndIf