Autor | Thema: SHGetSpecialFolderLocation |
| Datum:12.02.02 10:09 
(apollo@rw-net.de) | |
Hallo,
ich mal wieder. Ich schlage mich gerade mit der API-Funktion "SHGetSpecialFolderLocation" herum. Damit kann man u.a. den Pfad der IE-Favoriten auslesen (genau dafür brauch ich es).
Nur steht in der Win32-HIlfe nicht, wo diese Funktion hinterlegt ist.
Hat jemand die richtige Definition parat?
Danke schonmal.
mfG, René
|
|
|
| Datum:12.02.02 11:41 
(apollo@rw-net.de) | |
Hallo Alexander,
leider hilft mir das nur bedingt. ;(
Das habe ich mir daraus hergeleitet:
def GetSpecialFolderLocation(3) !"SHELL32","SHGetSpecialFolderLocation"
GetSpecialFolderLocation(%hwnd,"CSIDL_FAVORITES",string#)
Jetzt die Preisfrage: wo ist mein Fehler?
So funktioniert es nämlich nicht korrekt.
mfG, René
|
|
| Datum:12.02.02 11:56 
(alexander.schoenfeld@chronologic.de) | |
Hallo Rene !
Hab gerade ein Beispiel in PRFellow gefunden, shfolder.prv !
Mit freundlichem Gruss,
Alexander Schönfeld
|
|
| Datum:12.02.02 13:24 
(apollo@rw-net.de) | |
Dummerweise hab ich kein PrFellow...sonst hät ich da schon gekuckt.
mfG, René
|
|
| Datum:12.02.02 13:55 
(info@web-treffpunkt.de) | |
Bitteschön... ;0))
' Systemordner im Dateisystem mit SHGetSpecialFolderLocation ermitteln
' Benötigt Profan 6.6 (wg. Konstanten);
' bei Verzicht auf Konstanten auf jeden Fall 6.1 wegen Addr-Funktion
' Achtung: Der gewünschte Ordner muß(!) auch im Dateisystem vorliegen
' (Systemsteuerung klappt daher z.B. nicht)
' Im Fehlerfall ist der Return-String leer
' Ich hoffe(!), daß CoTaskMemFree in diesem Fall den vom System
' reservierten Speicher freigibt.
' Eigentlich müßte dies über die Free-Methode des IMalloc-Interface
' erfolgen, aber das geht mit Profan leider nicht.
' ole32.hlp läßt die Hoffnung nicht unbegründet erscheinen, aber sicher
' bin ich nicht.
Def %CSIDL_DESKTOP 0
Def %CSIDL_PROGRAMS 2
Def %CSIDL_CONTROLS 3
Def %CSIDL_PRINTERS 4
Def %CSIDL_PERSONAL 5
Def %CSIDL_FAVORITES 6
Def %CSIDL_STARTUP 7
Def %CSIDL_RECENT 8
Def %CSIDL_SENDTO 9
Def %CSIDL_BITBUCKET 10
Def %CSIDL_STARTMENU 11
Def %CSIDL_DESKTOPDIRECTORY 16
Def %CSIDL_DRIVES 17
Def %CSIDL_NETWORK 18
Def %CSIDL_NETHOOD 19
Def %CSIDL_FONTS 20
Def %CSIDL_TEMPLATES 21
Def %CSIDL_COMMON_STARTMENU 22
Def %CSIDL_COMMON_PROGRAMS 23
Def %CSIDL_COMMON_STARTUP 24
Def %CSIDL_COMMON_DESKTOPDIRECTORY 25
Def %CSIDL_APPDATA 26
Def %CSIDL_PRINTHOOD 27
Def SHGetSpecialFolderLocation(3) !"SHELL32","SHGetSpecialFolderLocation"
Def SHGetPathFromIDList(2) !"SHELL32","SHGetPathFromIDListA"
Def CoTaskMemFree(1) !"OLE32","CoTaskMemFree"
Declare buffer#
Proc GetSpecialFolder
Parameters csidl%
Declare lpidl&,result$
Dim buffer#,255
If Equ(SHGetSpecialFolderLocation(GetActiveWindow(),CSIDL%,Addr(lpidl&)),0)
If Neq(SHGetPathFromIDList(lpidl&,buffer#),0)
Let result$=String$(buffer#,0)
EndIf
EndIf
CoTaskMemFree(lpidl&)
Dispose buffer#
Return result$
EndProc
'Beispiel
''GetSpecialFolder %CSIDL_DESKTOP
''Print "Desktop-Ordner:",$(0)
''GetSpecialFolder %CSIDL_STARTUP
''Print "Autostart-Ordner:",$(0)
'' WaitInput
CU horst
|
|
| Datum:12.02.02 16:19 
(apollo@rw-net.de) | |
puh, da wär ich von selbst ja nie drauf gekommen. Is ja weitaus aufwändiger als ich mir das gedacht habe. :/
Aber es funktioniert super.
Danke euch beiden für eure Mühe. :)
mfG, René
|
|
| Datum:15.02.02 20:54 
(Pascalxd@owl-online.de) | |
Hallo Leute!
Wenn wir schon mal dabei sind: Einige Pfade von Systemordnern stehen ja
(zumindest unter Win9x) auch in der Registry unter
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
Spricht irgendwas dagegen, auf diese Weise z.B. den Pfad zum Autostart-Ordner zu
ermitteln? Oder drohen Kompatiblitätsprobleme mit höheren Windows-Versionen o.ä.
Schwierigkeiten?
SeeYou
Pascal
|
|
| Datum: 15.02.02 22:18 
(webmaster@rokosoft.de) | |
Hi Uwe,
ja wird wohl nicht überall klappen, da unter (z.B.) Windows XP
nicht mehr /Windows sonder /WindowsNT steht und dahinter gehts auch anders weiter.
Rolf
|
|