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:

Code: Alles auswählen

Debug GetEnvironmentVariable("windir")
EDIT
@2:

Code: Alles auswählen

ProgramFilename()
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 :mrgreen:

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 :mrgreen:
@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()