PBOSL - AppRunning() immer 0

Für allgemeine Fragen zur Programmierung mit PureBasic.
Rico
Beiträge: 24
Registriert: 06.09.2005 13:58

PBOSL - AppRunning() immer 0

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

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Rico
Beiträge: 24
Registriert: 06.09.2005 13:58

Beitrag 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 :allright: mir eine Lösung bietet

siehe hier:
http://www.purebasic.fr/german/viewtopi ... findwindow


Gruß Rico
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Rico hat geschrieben: Habe mich jetzt noch etwas auf dem Board umgeschaut und einen Thread gefunden in dem Thorsten1867 :allright: mir eine Lösung bietet

siehe hier:
http://www.purebasic.fr/german/viewtopi ... findwindow


Gruß Rico
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()
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Ich denke er benötigt diese Funktion für fremde Programme, nicht für eigene.
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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" :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Die Funktion von Thorsten überprüft doch die Prozesse, nicht die Windows - ganz unten, der letzte Post ist doch was Rico meint.
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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 :wink:
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 :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Rico
Beiträge: 24
Registriert: 06.09.2005 13:58

Beitrag 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
Benutzeravatar
saimen
Beiträge: 172
Registriert: 26.01.2005 10:44
Wohnort: Passau
Kontaktdaten:

Beitrag 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
Antworten