Seite 1 von 2
System-Verzeichnisse wie Desktop / Temp / ... rausfinden
Verfasst: 07.11.2005 18:42
von Delle
Hallo,
im CodeArchiv gibt es zwar eine Abfrage um herauszufinden
wie der Pfad z.B. zum Desktop liegt, aber das funzt anscheinend
nur unter XP (nicht Win98).
Gibt es noch andere Möglichkeiten die üblichen Pfade rauszubekommen?
Verfasst: 07.11.2005 18:53
von 125
Verfasst: 07.11.2005 18:57
von Delle
Okay, das ist aber nur der Temp.
Also der Befehl ist SHGetSpecialFolderPath_()
CSIDL_DESKTOP wäre der Desktop
http://msdn.microsoft.com/library/defau ... erpath.asp
Wie muss das dann konkret heißen? Bei SHGetSpecialFolderPath_(...) meckert PB immer bei - angeblich nicht gültig...
Verfasst: 07.11.2005 19:13
von 125
Hi, das meiste ist winapi, dürfte leicht zu portieren sein, ich schau es mir mal an.
mfg
125
Verfasst: 07.11.2005 19:14
von ts-soft
Wenn Du die PBOSL Libs hast:
Werde die Hilfe in der nächsen Version mal erweitern, so das man die
Konstanten auch findet, wurde anscheinen vergessen

(aber nicht
von mir

)
Verfasst: 07.11.2005 19:25
von 125
Hi,
hab nen bissle was vom VB Code geportet und was von TS-Softs code (Boardsuche) geklaut funzt super hier das ergebnis:
Code: Alles auswählen
Structure EMID
cb.b
abID.b[1]
EndStructure
Structure ITEMIDLIST
mkid.EMID
EndStructure
#CSIDL_FLAG_CREATE = $8000
#CSIDL_ADMINTOOLS = $30
#CSIDL_ALTSTARTUP = $1D
; Anwendungsdaten
#CSIDL_APPDATA = $1A
#CSIDL_BITBUCKET = $A
; CD Burning
#CSIDL_CDBURN_AREA = $3B
; Für alle Benutzer (All Users)
#CSIDL_COMMON_ADMINTOOLS = $2F
#CSIDL_COMMON_ALTSTARTUP = $1D
#CSIDL_COMMON_APPDATA = $23
; Desktop
#CSIDL_COMMON_DESKTOPDIRECTORY = $19
#CSIDL_COMMON_DOCUMENTS = $2E
; Favoriten
#CSIDL_COMMON_FAVORITES = $1F
; Gemeinsame Musik
#CSIDL_COMMON_MUSIC = $35
; Gemeinsame Bilder
#CSIDL_COMMON_PICTURES = $36
; Programme-Ordner im Startmenü
#CSIDL_COMMON_PROGRAMS = $17
; Starmenü
#CSIDL_COMMON_STARTMENU = $16
; Autostart
#CSIDL_COMMON_STARTUP = $18
; Vorlagen
#CSIDL_COMMON_TEMPLATES = $2D
; Gemeinsame Videos
#CSIDL_COMMON_VIDEO = $37
#CSIDL_CONTROLS = $3
; Cookies
#CSIDL_COOKIES = $21
; Desktop
#CSIDL_DESKTOP = $0
#CSIDL_DESKTOPDIRECTORY = $10
; Treiber
#CSIDL_DRIVES = $11
; Favoriten
#CSIDL_FAVORITES = $6
; Schriftarten
#CSIDL_FONTS = $14
; Verlauf
#CSIDL_HISTORY = $22
#CSIDL_INTERNET = $1
; Temporäre Internetdateien
#CSIDL_INTERNET_CACHE = $20
; Anwendungsdaten
#CSIDL_LOCAL_APPDATA = $1C
#CSIDL_MYDOCUMENTS = $C
; Eigene Musik
#CSIDL_MYMUSIC = $D
; Eigene Bilder
#CSIDL_MYPICTURES = $27
; Eigene Videos
#CSIDL_MYVIDEO = $E
; Netzwerkumgebung
#CSIDL_NETHOOD = $13
#CSIDL_NETWORK = $12
; Eigene Dateien
#CSIDL_PERSONAL = $5
#CSIDL_PRINTERS = $4
; Druckerumgebung
#CSIDL_PRINTHOOD = $1B
; Profil
#CSIDL_PROFILE = $28
; Programme
#CSIDL_PROGRAM_FILES = $26
; Gemeinsamme Dateien
#CSIDL_PROGRAM_FILES_COMMON = $2B
; Programme (im Startmenü)
#CSIDL_PROGRAMS = $2
; Zuletzt verwendete Dokumente
#CSIDL_RECENT = $8
; Senden An
#CSIDL_SENDTO = $9
; Startmenü
#CSIDL_STARTMENU = $B
; Autostart
#CSIDL_STARTUP = $7
; System (bzw. System32)
#CSIDL_SYSTEM = $25
; Vorlagen
#CSIDL_TEMPLATES = $15
; Windows
#CSIDL_WINDOWS = $24
#NOERROR = 0
Procedure.s GetSpecialeFolder(num.l)
*idl.ITEMIDLIST = #Null
If SHGetSpecialFolderLocation_ (0, folder, @*idl) = #NOERROR
Buff.s = Space (#MAX_PATH)
If SHGetPathFromIDList_ (*idl, @Buff)
If Right(Buff, 1) <> "\" : Buff + "\" : EndIf
ProcedureReturn Buff
EndIf
EndIf
EndProcedure
Debug GetSpecialeFolder(#CSIDL_DESKTOP)
mfg
125
Verfasst: 07.11.2005 19:29
von ts-soft
>> hab nen bissle was vom VB Code geportet und was von TS-Softs code(Boardsuche) geklaut
Bei sowas kann man ja kaum von klauen sprechen

, findeste so ähnlich in der System.pbi von GPI
Aber PBOSL ist doch am bequemsten
Hier nochmal die Constanten aus PBOSL, funzen auch mit der obigen Procedure:
Code: Alles auswählen
#GetHWInfo_DESKTOP = $0000
#GetHWInfo_INTERNET = $0001
#GetHWInfo_PROGRAMS = $0002
#GetHWInfo_CONTROLS = $0003
#GetHWInfo_PRINTERS = $0004
#GetHWInfo_PERSONAL = $0005
#GetHWInfo_FAVORITES = $0006
#GetHWInfo_STARTUP = $0007
#GetHWInfo_RECENT = $0008
#GetHWInfo_SENDTO = $0009
#GetHWInfo_BITBUCKET = $000A
#GetHWInfo_STARTMENU = $000B
#GetHWInfo_MYDOCUMENTS = $000C
#GetHWInfo_MYMUSIC = $000D
#GetHWInfo_MYVIDEO = $000E
#GetHWInfo_DIRECTORY = $0010
#GetHWInfo_DRIVES = $0011
#GetHWInfo_NETWORK = $0012
#GetHWInfo_NETHOOD = $0013
#GetHWInfo_FONTS = $0014
#GetHWInfo_TEMPLATES = $0015
#GetHWInfo_COMMON_STARTMENU = $016
#GetHWInfo_COMMON_PROGRAMS = $0017
#GetHWInfo_COMMON_STARTUP = $0018
#GetHWInfo_COMMON_DESKTOPDIRECTORY = $0019
#GetHWInfo_APPDATA = $001A
#GetHWInfo_PRINTHOOD = $001B
#GetHWInfo_LOCAL_APPDATA = $001C
#GetHWInfo_ALTSTARTUP = $001D
#GetHWInfo_COMMON_ALTSTARTUP = $001E
#GetHWInfo_COMMON_FAVORITES = $001F
#GetHWInfo_INTERNET_CACHE = $0020
#GetHWInfo_COOKIES = $0021
#GetHWInfo_HISTORY = $0022
#GetHWInfo_COMMON_APPDATA = $0023
#GetHWInfo_WINDOWS = $0024
#GetHWInfo_SYSTEM = $0025
#GetHWInfo_PROGRAM_FILES = $0026
#GetHWInfo_MYPICTURES = $0027
#GetHWInfo_PROFILE = $0028
#GetHWInfo_SYSTEMX86 = $0029
#GetHWInfo_PROGRAM_FILESX86 = $002A
#GetHWInfo_PROGRAM_FILES_COMMON = $002B
#GetHWInfo_PROGRAM_FILES_COMMONX86 = $002C
#GetHWInfo_COMMON_TEMPLATES = $002D
#GetHWInfo_COMMON_DOCUMENTS = $002E
#GetHWInfo_COMMON_ADMINTOOLS = $002F
#GetHWInfo_ADMINTOOLS = $0030
#GetHWInfo_CONNECTIONS = $0031
#GetHWInfo_COMMON_MUSIC = $0035
#GetHWInfo_COMMON_PICTURES = $0036
#GetHWInfo_COMMON_VIDEO = $0037
#GetHWInfo_RESOURCES = $0038
#GetHWInfo_RESOURCES_LOCALIZED = $0039
#GetHWInfo_COMMON_OEM_LINKS = $003A
#GetHWInfo_CDBURN_AREA = $003B
#GetHWInfo_COMPUTERSNEARME = $003D
#GetHWInfo_FLAG_PER_USER_INIT = $0800
#GetHWInfo_FLAG_NO_ALIAS = $1000
#GetHWInfo_FLAG_DONT_VERIFY = $4000
#GetHWInfo_FLAG_CREATE = $8000
#GetHWInfo_FLAG_MASK = $FF00
Achtung: ob die Ordner existieren hängt von der WindowsVersion, sowie vom installiertem Internet Explorer ab
//Edit
PBOSL.chm wurde geupdated, alle Konstanten jetzt in der Hilfe aufgeführt!
Verfasst: 17.01.2006 18:13
von AND51
Habe das hier im Cache von Google gefunden:
http://66.249.93.104/search?q=cache:CvJ ... lr=lang_de
Code: Alles auswählen
Procedure.s spec_folder(clsi_const.l)
path.s = Space(2048)
SHGetSpecialFolderLocation_(0,clsi_const,@pidl.l)
SHGetPathFromIDList_(pidl,@path)
CoTaskMemFree_(pidl)
ProcedureReturn path+"\"
EndProcedure
Debug spec_folder($1a) ;CSIDL_APPDATA
Debug spec_folder($2f) ;CSIDL_COMMON_ADMINTOOLS
Debug spec_folder($23) ;CSIDL_COMMON_APPDATA
Debug spec_folder($1f) ;CSIDL_COMMON_FAVORITES
Debug spec_folder($19) ;CSIDL_COMMON_DESKTOPDIRECTORY
Debug spec_folder($2e) ;CSIDL_COMMON_DOCUMENTS
Debug spec_folder($17) ;CSIDL_COMMON_PROGRAMS
Debug spec_folder($16) ;CSIDL_COMMON_STARTMENU
Debug spec_folder($18) ;CSIDL_COMMON_STARTUP
Debug spec_folder($2d) ;CSIDL_COMMON_TEMPLATES
Debug spec_folder($0) ;CSIDL_DESKTOP
Debug spec_folder($10) ;CSIDL_DESKTOPDIRECTORY
Debug spec_folder($6) ;CSIDL_FAVORITES
Debug spec_folder($14) ;CSIDL_FONTS
Debug spec_folder($22) ;CSIDL_HISTORY
Debug spec_folder($20) ;CSIDL_INTERNET_CACHE
Debug spec_folder($1c) ;CSIDL_LOCAL_APPDATA
Debug spec_folder($27) ;CSIDL_MYPICTURES
Debug spec_folder($13) ;CSIDL_NETHOOD
Debug spec_folder($5) ;CSIDL_PERSONAL
Debug spec_folder($28) ;CSIDL_PROFILE
Debug spec_folder($2b) ;CSIDL_PROGRAM_FILES_COMMON
Debug spec_folder($2) ;CSIDL_PROGRAMS
Debug spec_folder($8) ;CSIDL_RECENT
Debug spec_folder($9) ;CSIDL_SENDTO
Debug spec_folder($b) ;CSIDL_STARTMENU
Debug spec_folder($7) ;CSIDL_STARTUP
Debug spec_folder($25) ;CSIDL_SYSTEM
Debug spec_folder($15) ;CSIDL_TEMPLATES
Debug spec_folder($24) ;CSIDL_WINDOWS
Wollte es mal posten, damit es nicht verloren geht! finde, dass diese Funktion sehr einfach ist.
Habe übrigens etwas geändert: Bei der Rückgabe des Strings aus der Procedure wird ein \ hinten drangehängt!
Verfasst: 17.01.2006 18:17
von Delle
Frag mich wieder nur, warum da TEMP nicht dabei ist :-/
Verfasst: 17.01.2006 18:32
von ts-soft
@ANDI51
Den Backslash immer anzuhängen ist auch nicht das wahre. Besser wäre es zu überprüfen ob einer vorhanden ist.
@Delle
Diese Funktion ist nur bedingt zur Pfad-Ermittlung geeignet, da sie stark Windows-Versions und IE-Version abhängig ist.
Temppfad wird mit folgender API ermittelt:
Code: Alles auswählen
Temp.s = Space(#MAX_PATH)
GetTempPath_(#MAX_PATH, @Temp)
Debug Temp