Seite 1 von 2
Windows Directory und Name der Executable
Verfasst: 01.02.2010 23:27
von DerMeister
Hallo
Ich hätte mal 2 kleine Fragen.
Zuerst: Ist es möglich die Windows Directory (die ja standardmäßig bei C:\Windows ist) ähnlich wie mit GetHomeDirectory() herauszufinden? Oder kann die Windows Directory sowieso nirgendwo anders sein?
Und dann noch ob es möglich ist, ob eine bereits kompilierte Exe Datei ihren eigenen Dateinamen herausfinden kann (falls die Exe zB vom Benutzer umbenannt wurde)?
Danke schon mal falls jemand antwortet

Re: Windows Directory und Name der Executable
Verfasst: 01.02.2010 23:37
von c4s
Code: Alles auswählen
Procedure.s GetSpecialFolderPath(CSIDL.l)
Protected LibraryID
Protected Path.s = Space(#MAX_PATH)
LibraryID = OpenLibrary(#PB_Any, "shell32.dll")
If LibraryID
CallFunction(LibraryID, "SHGetSpecialFolderPathA", 0, @Path, CSIDL, 0)
CloseLibrary(LibraryID)
EndIf
ProcedureReturn Path
EndProcedure
Debug GetSpecialFolderPath(#CSIDL_WINDOWS) ;Windows-Pfad
Debug GetFilePart(ProgramFilename()) ;Programmname
Für die Prozedur GetSpecialFolderPath() findest du je nach belieben auch etwas andere herangehensweisen mit der Forensuche. So sollte es aber auch funktionieren.
Re: Windows Directory und Name der Executable
Verfasst: 01.02.2010 23:40
von TomS
@1:
EDIT
@2:
Wo auch immer in der Hilfe der Befehl wieder versteckt ist oO
Re: Windows Directory und Name der Executable
Verfasst: 02.02.2010 00:01
von Kiffi
TomS hat geschrieben:Wo auch immer in der Hilfe der Befehl wieder versteckt ist oO
Im Kapitel
Process
oder einfacher: Cursor auf ProgramFilename() setzen, <F1> drücken und tadaaa!
Grüße ... Kiffi
Re: Windows Directory und Name der Executable
Verfasst: 02.02.2010 00:19
von ts-soft
Wer ein Ergebnis für Windir unter allen WinVersionen wünscht sollte nach Möglichkeit dies,
und nicht die anderen Vorschläge, nutzen
Code: Alles auswählen
Define windir.s{#MAX_PATH}
GetWindowsDirectory_(@windir, #MAX_PATH)
Debug windir
Dasselbe gilt für das Systemdirectory, möglichst keine Environmentvars oder Specialfolders,
die es z.B. unter Win95 nicht gibt.
Bei Programmen, die für W2K und aufwärts sind, ist dies aber vernachlässigbar.
Gruß
Thomas
Re: Windows Directory und Name der Executable
Verfasst: 02.02.2010 11:54
von Mok
ts-soft hat geschrieben:Wer ein Ergebnis für Windir unter allen WinVersionen wünscht sollte nach Möglichkeit dies,
und nicht die anderen Vorschläge, nutzen
@DerMeister: Für dich wird das nicht gehen, da du eine Demo-Version hast (WinAPI und so...).
Re: Windows Directory und Name der Executable
Verfasst: 02.02.2010 15:26
von DerMeister
Ja, als ich den Code kompilieren wollte kannte Purebasic die Konstante #MAX_PATH nicht.
Aber trotzdem Danke.
Re: Windows Directory und Name der Executable
Verfasst: 02.02.2010 15:39
von Kiffi
DerMeister hat geschrieben:Ja, als ich den Code kompilieren wollte kannte Purebasic die Konstante #MAX_PATH nicht.
kleiner Tipp: es gibt mittlerweile die V4.41 als Demo.
->
http://www.purebasic.com/download.php
DerMeister hat geschrieben:Aber trotzdem Danke.
schon aufgegeben?
Grüße ... Kiffi
Re: Windows Directory und Name der Executable
Verfasst: 02.02.2010 16:22
von DerMeister
Kiffi hat geschrieben:kleiner Tipp: es gibt mittlerweile die V4.41 als Demo.
Ah Danke für die Info. Ich schau da nicht immer so regelmäßig nach.
Kiffi hat geschrieben:schon aufgegeben?
Mir gerade noch eingefallen is, dass es evtl. über EnvironmentVariablen geht, in der PB Hilfe is auch bei ExamineEnvironmentVariables() ein Beispiel vorhanden. Da kann man auch verschiedene Sachen wie HomeDrive, WindowsDirectory, Userdomain etc. herausfinden.
Edit:
Hier noch ein Beispiel wie es gehen könnte.
Code: Alles auswählen
OpenConsole()
If ExamineEnvironmentVariables()
While NextEnvironmentVariable()
If EnvironmentVariableName() = "windir"
PrintN(EnvironmentVariableValue())
EndIf
Wend
EndIf
Input()
Re: Windows Directory und Name der Executable
Verfasst: 02.02.2010 17:34
von ts-soft
Demokompatible Version (hoffe ich mal

)
Code: Alles auswählen
Prototype GetWindowsDirectory(lpBuffer.s, uSize)
Procedure.s GetWindowsDirectory()
Protected result.s = Space(260)
Protected DLL = OpenLibrary(#PB_Any, "kernel32.dll")
Protected _GetWindowsDirectory.GetWindowsDirectory
If DLL
CompilerIf #PB_Compiler_Unicode
_GetWindowsDirectory = GetFunction(DLL, "GetWindowsDirectoryW")
CompilerElse
_GetWindowsDirectory = GetFunction(DLL, "GetWindowsDirectoryA")
CompilerEndIf
If _GetWindowsDirectory
_GetWindowsDirectory(result, 260)
If result
If Right(result, 1) <> "\" : result + "\" : EndIf
EndIf
EndIf
CloseLibrary(DLL)
EndIf
ProcedureReturn result
EndProcedure
Debug GetWindowsDirectory()