| |
|
|
| Systemordner in the Dateisystem with SHGetSpecialFolderLocation detect CompileMarkSeparationBenö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
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 6
Print Autostart-Ordner:, $(0)
/../../function-references/XProfan/waitinput/'>WaitInput
Author is ldr. not famous.
salvo, iF. |
|
|
| |
|
|