| |
|
|
Torsten Rümker | Ciao, ich versuche gerade herauszubekommen, wie man den Pfad von Eigene File herausbekommen kann. Für Verschiedene andere Verzeichnisse (Windowsverzeichnis, Programmverzeichnis) kann man das ja aus einer Systemvariablen erfahren, aber wie erfahre ich das Verzeichnis per Eigene File per den aktuellen Benutzer?
MfG Torsten |
|
|
| Ich lerne, ob ich will oder nicht! Betriebssystem: - Ubuntu 15.x - Windows (diverse) XProfan Version: X2 | 23.05.2006 ▲ |
|
|
|
|
Frank Abbing | Einer davon isses: KompilierenMarkierenSeparierenSystemordner 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 StartMenueAutostart(0) Readini$("Hkey_1","SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders","Startup")
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 SHGetSpecialFolderLocation(GetActiveWindow(),CSIDL%,Addr(lpidl&))=0
Print lpidl&
IfNot SHGetPathFromIDList(lpidl&,buffer#)=0
Let result$=String$(buffer#,0)
EndIf
EndIf
CoTaskMemFree(lpidl&)
Dispose buffer#
Return result$
EndProc
Beispiel
Window 0,0-%maxx,%maxy
Print $TempDir
Print
Print StartMenueAutostart()
Print
GetSpecialFolder %CSIDL_STARTUP
Whileloop 50
GetSpecialFolder &loop-1
If &loop>9
Print Str$(Int(&loop-1));"",$(0)
Else
Print Str$(Int(&loop-1));" ",$(0)
EndIf
a>
WaitInput
|
|
|
| |
|
|
|
| Die 5 ist Eigenen File! Möchte nochmal drauf aufmerksam machen, das die Ergebnisse stark von der installiertem InternetExplorer Version abhängen. Wenn also alternative API vorhanden ist, ist diese zu bevorzugen.
Eigene File funktioniert aber immer, wenn der Internet Explorer installiert ist, per andere Pfade lieber die MSDN studieren. |
|
|
| |
|
|
|
Frank Abbing | Nenne mal bitte alternative APIs...
Ich bezweifle, dass die API nicht richtig funktioniert, wenn der IE nicht installiert ist. Das kann höchstens bei Windows 95 der Fall sein, weil hier einige Dlls fehlten, wenn der IE nicht vorhanden ist. Und mal ehrlich - Windows 95 ist Schnee von gestern... |
|
|
| |
|
|
|
| [...]
Da stehen größtenteils die erforderlichen Win und IE Versionen bei.
z.B CSIDL_PROGRAM_FILES (Crogramme meist auf dt. Systemen) existiert erst ab IE 5. |
|
|
| |
|
|
|
| [quote:a23301beb1=TS-Soft] [...]
Da stehen größtenteils die erforderlichen Win und IE Versionen bei.[/quote:a23301beb1] Wobei mir mal wieder auffällt das MSDN mit FF betrachtet einfach furchtbar aussieht. |
|
|
| |
|
|
|
| Hier ne Alternative per CSIDL_PROGRAM_FILES KompilierenMarkierenSeparierencls
declare ProgramFiles$
ProgramFiles$ = ReadIni$("HKEY_2", "SOFTWAREMicrosoftWindowsCurrentVersion", "ProgramFilesDir")
print ProgramFiles$
waitkey /pre> Funktioniert dann auch ohne IE5, genauso per Temp, System usw. lieber die entsprechende API verwenden, anstatt dieser AllroundFunktion, bzw. wenn, dann eben mit obigen Link vergewissern |
|
|
| |
|
|
|
Torsten Rümker | So, ich habe jetzt mal in der Registry gestöbert und einen Eintrag gefunden, der mir eventuell helfen kann. und zwar: HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrent VersionExplorerShellFolders und hier dann der Eintrag Personal
Kann das bitte jemand bestätigen, bzw. halt auch nicht? Möglichst nicht nur WinXP nutzer wäre schön
MfG Torsten |
|
|
| Ich lerne, ob ich will oder nicht! Betriebssystem: - Ubuntu 15.x - Windows (diverse) XProfan Version: X2 | 24.05.2006 ▲ |
|
|
|
|
| Für Eigene File (CSIDL_PERSONAL = 5) kannste den Code von Frank verwenden, funzt ab Win95 mit IE 3.0 (evtl. sogar ohne?). Da gibts keine Probleme
Aber bei manchen dieser Constanten sollte man sehr vorsichtig sein, bzw. gibts eine Leerstring wenn es noch nicht existiert.
Leider glauben viele, diese Constanten auf jeden System nutzen zu können, deshalb immer Informieren, bevor man es nutzt. |
|
|
| |
|
|