Gestartete Programme inklusive Pfad ermitteln

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Gestartete Programme inklusive Pfad ermitteln

Beitrag von Sicro »

Ich suche eine Möglichkeit, gestartete Programme inklusive Pfad zu ermitteln.
Sämtliche Codes, die ich bisher fand, lieferten mir nur den Dateinamen zurück.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Gestartete Programme inklusive Pfad ermitteln

Beitrag von RSBasic »

Was meinst du damit genau? Möchtest du den Pfad deiner eigenen Anwendung ermitteln?

Code: Alles auswählen

Debug ProgramFilename()
Oder den Pfad einer Anwendung, die zuvor mit RunProgram() ausgeführt wurde?
Oder den Pfad eines Programms, welches bereits läuft?
(http://www.rsbasic.de/aktualisierung/wi ... ssnamen.pb
http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Oder siehe PBOSL-Process-Code)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Gestartete Programme inklusive Pfad ermitteln

Beitrag von Sicro »

Sorry, ich ging davon aus, dass ich mich eindeutig ausgedrückt habe.
Der Punkt 3 ist korrekt, wobei die Pfade von allen gestarteten Programmen ermittelt werden sollen.

Durch deine beiden Links konnte ich mir ein Code zusammenstellen, danke :allright:

Code: Alles auswählen

Procedure ScanRunningProcesses()
  
  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)
          Debug PeekS(@Module\szExePath[0])
        EndIf
      
        CloseHandle_(Snapshot2)
      EndIf
      
      ProcessFound = Process32Next_(Snapshot, Process)
    Wend
    
    CloseHandle_(Snapshot)
  EndIf
  
EndProcedure
winlogon.exe wird damit nicht aufgelistet, aber das ist mir auch nicht wichtig.

Wichtig: 64-Bit-Programme werden nur aufgelistet, wenn mit dem 64-Bit-Compiler kompiliert wurde.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Antworten