System-Verzeichnisse wie Desktop / Temp / ... rausfinden

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

System-Verzeichnisse wie Desktop / Temp / ... rausfinden

Beitrag 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?
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag 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...
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Hi, das meiste ist winapi, dürfte leicht zu portieren sein, ich schau es mir mal an.

mfg
125
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
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

Beitrag 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: )
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag 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
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
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

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Frag mich wieder nur, warum da TEMP nicht dabei ist :-/
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

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten