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 ?

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.