Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249177 (10613)
  Suchen
 Zurück zur Übersicht
 AutorThema: SHGetSpecialFolderLocation
Rene Wagner
Datum:12.02.02 10:09 Antwortenals Email verschicken (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é


Alexander Schönfeld
Datum:12.02.02 10:54 Antwortenals Email verschicken (alexander.schoenfeld@chronologic.de) 


Hallo Rene !
Folgende URL sollte helfen :)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/Shell/reference/functions/shgetspecialfolderlocation.asp

Mit freundlichem Gruss,
Alexander Schönfeld


Rene Wagner
Datum:12.02.02 11:41 Antwortenals Email verschicken (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é



Alexander Schönfeld
Datum:12.02.02 11:56 Antwortenals Email verschicken (alexander.schoenfeld@chronologic.de) 


Hallo Rene !

Hab gerade ein Beispiel in PRFellow gefunden, shfolder.prv !

Mit freundlichem Gruss,
Alexander Schönfeld


Rene Wagner
Datum:12.02.02 13:24 Antwortenals Email verschicken (apollo@rw-net.de) 


Dummerweise hab ich kein PrFellow...sonst hät ich da schon gekuckt.

mfG, René


Horst Horn
Datum:12.02.02 13:55 Antwortenals Email verschicken (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


Rene Wagner
Datum:12.02.02 16:19 Antwortenals Email verschicken (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é


Uwe ''Pascal'' Niemeier
Datum:15.02.02 20:54 Antwortenals Email verschicken (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


Rolf Koch
Datum: 15.02.02 22:18 Antwortenals Email verschicken (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


 Zurück zur Übersicht