Seite 1 von 1

Verzeichniss ermitteln, welches anderes Prog gesetzt hat !

Verfasst: 11.12.2013 20:01
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:

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Verfasst: 21.12.2013 13:02
von _sivizius
hast du das Prgram selbst gestartet mit RunProgram()? oder sogar selbst programmiert?

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Verfasst: 24.12.2013 10:12
von 3dhubiflieger
Ich habe es selbst gestartet. Ich brauche das Verzeichniss um Rückschlüsse daraus zu ziehen was das Programm gerade macht.

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Verfasst: 25.12.2013 19:33
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

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Verfasst: 26.12.2013 21:32
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.

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Verfasst: 26.12.2013 21:35
von RSBasic
@3dhubiflieger
Die fehlenden Strukturen findest du im Code, der verlinkt wurde. Diese einfach bei dir einfügen, dann sollte es funktionieren.

Re: Verzeichniss ermitteln, welches anderes Prog gesetzt hat

Verfasst: 26.12.2013 23:46
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.