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:

Code: Alles auswählen

Debug GetHWFolder(#GetHWInfo_DESKTOP)
Werde die Hilfe in der nächsen Version mal erweitern, so das man die
Konstanten auch findet, wurde anscheinen vergessen :oops: (aber nicht
von mir :wink: )

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 :wink: , findeste so ähnlich in der System.pbi von GPI
Aber PBOSL ist doch am bequemsten :wink:

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