Test ob Windows schon gestartet wurde...

Für allgemeine Fragen zur Programmierung mit PureBasic.
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Test ob Windows schon gestartet wurde...

Beitrag von 3dhubiflieger »

Hallo, wollte mal fragen welche Möglichkeiten es gibt um zu testen, ob Windows, sprich der Explorer(Explorer.exe von Windows) schon gestartet wurde. Ich hatte die Processid vom Explorer abgefragt. Aber irgendwie scheints da unter Win7 Probleme zu geben wie mir ein User meines Programmes berichtete. Gibt es vielleicht ne API Funktion oder sonst irgendetwas ?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Test ob Windows schon gestartet wurde...

Beitrag von RSBasic »

http://www.rsbasic.de/aktualisierung/wi ... 3%A4uft.pb
Damit habe ich keine Probleme beim Überprüfen, ob ein Prozess, beispielsweise explorer.exe, bereits läuft.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: Test ob Windows schon gestartet wurde...

Beitrag von 3dhubiflieger »

Genau mit diser Prozedur hab ich ja den Explorer abgefragt :) ! Ich wollte aber wissen was es sonst noch so gibt. Ne Direktabfrage per API konnte ich nicht finden. Oder gibts da was ?
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Test ob Windows schon gestartet wurde...

Beitrag von helpy »

Der Explorer läuft doch IMMER!
Der Desktop ist Teil des Explorers!
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Test ob Windows schon gestartet wurde...

Beitrag von RSBasic »

Eine andere Möglichkeit:

Code: Alles auswählen

EnableExplicit

Define Handle

Handle = FindWindow_(0, "Program Manager")
If Handle
  Debug "explorer.exe läuft"
Else
  Debug "explorer.exe läuft nicht"
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Test ob Windows schon gestartet wurde...

Beitrag von Danilo »

helpy hat geschrieben:Der Explorer läuft doch IMMER!
Der Desktop ist Teil des Explorers!
Vielleicht hat er einen Service programmiert, der vor dem Login gestartet wird?
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: Test ob Windows schon gestartet wurde...

Beitrag von helpy »

Hi Danilo,

... da hast Du natürlich recht!
Windows 10
PB Last Final / (Sometimes testing Beta versions)
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: Test ob Windows schon gestartet wurde...

Beitrag von 3dhubiflieger »

Es geht darum den Explorer zu erkennen, nachdem mein Programm sich als Shell gestartet hat und eben diesen anschliessend ausführt. Das Problem ist, das es bei mir unter Win 8 und XP funktioniert. Aber ein User meint das bei ihm unter Win7 der Explorer immer wieder und wieder gestartet wird. Das heisst es wird immer wieder der Text "..starte Explorer ausgegeben" (Textroutine meinerseits) Nach genauerer Analyse bin ich zu dem Schluss gekommen das das ganze nur an folgender Prozedur mit dem damit verbundenen Pfad zusammenhängen kann...
Kann jemand diesen Code für mich unter Win 7 testen ? Das wäre net !

Code: Alles auswählen

Procedure ProcessID(PName$)
 
  Protected Snapshot, Snapshot2, ProcessFound
  Protected Process.PROCESSENTRY32, Module.MODULEENTRY32
 
  Process\dwSize = SizeOf(PROCESSENTRY32)
  Module\dwSize  = SizeOf(MODULEENTRY32)
 
  Snapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If Snapshot
    ProcessFound = Process32First_(Snapshot, Process)
    While ProcessFound
    
      Snapshot2 = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE,Process\th32ProcessID)
      If Snapshot2
        If Module32First_(Snapshot2, @Module)
          If UCase(PName$) = UCase(PeekS(@Module\szExePath[0]))
            CloseHandle_(Snapshot)
            CloseHandle_(Snapshot2)
            ProcedureReturn Process\th32ProcessID
          EndIf
     
          CloseHandle_(Snapshot2)
        EndIf  
      EndIf
     
      ProcessFound = Process32Next_(Snapshot, Process)
    Wend
   
    CloseHandle_(Snapshot)
  EndIf
 ProcedureReturn 0
EndProcedure

Explorerpfad$        = GetEnvironmentVariable("SYSTEMROOT") + "\" + "EXPLORER.EXE"

If processid(explorerpfad$)
  Debug "Windows läuft !"
EndIf
Edit by NicTheQuick: Code-Tags gesetzt
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Test ob Windows schon gestartet wurde...

Beitrag von edel »

Du wirst unter 32 Bit nur 32bit Prozesse auflisten koennen unter 64bit das gleiche.
Antworten