Folgende Prozedure könnte aufgerufen werden, um im Application-Pfad einen eigenen Programmordner anzulegen und abzurufen, um dort alle seine Dateien abzulegen. Diese Löung funktioniert auch unter Vista ohne Adminrechte.
Im Hauptprogramm wird zur Demonstration dann eine Ini-Datei angelegt (ob .ini jetzt sinnvoll ist oder nicht mag hier mal egal sein)
Code
Declare appdata$
Proc GetAppData
Parameters mydir$
Def SHGetSpecialFolderLocation(3) !"SHELL32","SHGetSpecialFolderLocation"
Def SHGetPathFromIDList(2) !"SHELL32","SHGetPathFromIDListA"
Def CoTaskMemFree(1) !"OLE32","CoTaskMemFree"
DEF MakeSureDirectoryPathExists(1) ! "dbghelp.dll","MakeSureDirectoryPathExists"
Declare lpidl&,result$,buffer#
Dim buffer#,280
If SHGetSpecialFolderLocation(GetActiveWindow(),26,Addr(lpidl&))=0 '-> 26 = CSIDL_APPDATA
IfNot SHGetPathFromIDList(lpidl&,buffer#)=0
result$=String$(buffer#,0)
EndIf
EndIf
CoTaskMemFree(lpidl&)
Dispose buffer#
If result$<>""
result$=Trim$(result$)+"\"+mydir$+"\"
MakeSureDirectoryPathExists(Addr(result$))
EndIF
Return result$
EndProc
Window 0,0-%maxx,400
appdata$=GetAppData("Programmname")
If appdata$<>""
WRITEINI appdata$+"Programmname.ini","Anwendung","Schlüssel"="Wert"
Print "Ordner \q"+appdata$+"\q wurde erstellt."
Print "Ini-Datei \qProgrammname.ini\q wurde erstellt."
Else
Print "Es konnte kein Ordner ermittelt und erstellt werden!"
Endif
WaitInput
End
Alles anzeigen
Vielleicht könnte Roland das direkt einbauen, z.B. als XProfanvariable $apppath oder $appdir.