Verzeichniss ermitteln, welches anderes Prog gesetzt hat !

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

Verzeichniss ermitteln, welches anderes Prog gesetzt hat !

Beitrag von 3dhubiflieger »

Hallo, ich habe das Problem das ich das aktuelle Verzeichniss brauche worin das aktuelle Programm welches im Vordergrund ist arbeitet. Ich meine aber hier nicht den EXEPfad des im Vordergrund befindlichen Programmes, sondern den Pfad welches dieses Programm selbst bestimmt bzw setzt !
Das heisst Getcurrentdirectory() tut hier nix zur Sache, da es sich auf mein Programm bezieht.

Wie geht sowas ? Wer kann mir helfen ? :iamwithstupid:
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Beitrag von _sivizius »

hast du das Prgram selbst gestartet mit RunProgram()? oder sogar selbst programmiert?
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Beitrag von 3dhubiflieger »

Ich habe es selbst gestartet. Ich brauche das Verzeichniss um Rückschlüsse daraus zu ziehen was das Programm gerade macht.
Benutzeravatar
Sicro
Beiträge: 969
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Beitrag von Sicro »

Nimm diesen Code: http://www.purebasic.fr/english/viewtop ... 07#p419707

Das CurrentDirectory ist da noch nicht dabei, aber das ist ja schnell zusammengebastelt:

Code: Alles auswählen

Procedure.s GetCurrentDir(ProcessID.i)
  Protected Result.s, ProcessHandle.i, *CurrentDir
  Protected rtl.RTL_USER_PROCESS_PARAMETERS, pbi.PROCESS_BASIC_INFORMATION, peb.PEB
  
  AdjustProcessPrivilege()
  
  ProcessHandle = OpenProcess_(#PROCESS_QUERY_INFORMATION | #PROCESS_VM_READ, #False, ProcessID)
  If ProcessHandle
    pbi\PebBaseAddress = GetPBI(ProcessHandle)
    peb\ProcessParameters = GetPEB(ProcessHandle, pbi\PebBaseAddress)
    
    
    If ReadProcessMemory_(ProcessHandle, peb\ProcessParameters, @rtl, SizeOf(rtl), #Null)
      If rtl\CurrentDirectoryPath\Buffer
        *CurrentDir = AllocateMemory(rtl\CurrentDirectoryPath\MaximumLength)

        If ReadProcessMemory_(ProcessHandle, rtl\CurrentDirectoryPath\Buffer, *CurrentDir, rtl\CurrentDirectoryPath\MaximumLength, #Null)
          Result = PeekS(*CurrentDir, rtl\CurrentDirectoryPath\MaximumLength, #PB_Unicode)
        EndIf
        FreeMemory(*CurrentDir)
      EndIf
    EndIf
    CloseHandle_(ProcessHandle)
  EndIf
  
  ProcedureReturn Result
EndProcedure

Process = RunProgram("notepad.exe", "", "C:\Users\", #PB_Program_Open)
If IsProgram(Process)
  Debug GetCurrentDir(ProgramID(Process)) ; gibt "C:\Users\" aus
EndIf
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
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Beitrag von 3dhubiflieger »

Also irgendwie geht der Code bei mir nicht. Da kommt immer:
Line 3: Structure not found: RTL_USER_PROCESS_PARAMETERS.

Den andere Code hinter dem Link kappier ich net. Is mir zu komplex. Ich will eigentlich nur das aktuelle Verzeichniss des "fremden" Programmes wissen.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Beitrag von RSBasic »

@3dhubiflieger
Die fehlenden Strukturen findest du im Code, der verlinkt wurde. Diese einfach bei dir einfügen, dann sollte es funktionieren.
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: 969
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Beitrag von Sicro »

3dhubiflieger hat geschrieben:Ich will eigentlich nur das aktuelle Verzeichniss des "fremden" Programmes wissen.
Und das macht der komplexe Code zusammen mit meiner Procedure. Der Code hinter dem Link ist also ebenfalls erforderlich und keine Alternative zu meinem Code.
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