Windows Directory und Name der Executable

Anfängerfragen zum Programmieren mit PureBasic.
DerMeister
Beiträge: 28
Registriert: 30.12.2009 19:20

Windows Directory und Name der Executable

Beitrag 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 :)
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Windows Directory und Name der Executable

Beitrag 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.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Windows Directory und Name der Executable

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Windows Directory und Name der Executable

Beitrag 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
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Windows Directory und Name der Executable

Beitrag 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
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Windows Directory und Name der Executable

Beitrag 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...).
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
DerMeister
Beiträge: 28
Registriert: 30.12.2009 19:20

Re: Windows Directory und Name der Executable

Beitrag von DerMeister »

Ja, als ich den Code kompilieren wollte kannte Purebasic die Konstante #MAX_PATH nicht.
Aber trotzdem Danke.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Windows Directory und Name der Executable

Beitrag 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
a²+b²=mc²
DerMeister
Beiträge: 28
Registriert: 30.12.2009 19:20

Re: Windows Directory und Name der Executable

Beitrag 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()
Zuletzt geändert von DerMeister am 02.02.2010 17:46, insgesamt 2-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Windows Directory und Name der Executable

Beitrag 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()
Antworten