Deutsch
Forum

Wie den Pfad zu "Eigene Dateien" feststellen?

 

Torsten
Rümker
Hallo,
ich versuche gerade herauszubekommen, wie man den Pfad von Eigene Dateien herausbekommen kann.
Für Verschiedene andere Verzeichnisse (Windowsverzeichnis, Programmverzeichnis) kann man das ja aus einer Systemvariablen erfahren, aber wie erfahre ich das Verzeichnis für Eigene Dateien für 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:
KompilierenMarkierenSeparieren
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 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

Wend

WaitInput
 
23.05.2006  
 



Die 5 ist Eigenen Dateien!
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 Dateien funktioniert aber immer, wenn der Internet Explorer installiert ist, für andere Pfade lieber die MSDN studieren.
 
23.05.2006  
 




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...
 
23.05.2006  
 



[...] 

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.
 
23.05.2006  
 



[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.
 
23.05.2006  
 



Hier ne Alternative für CSIDL_PROGRAM_FILES
KompilierenMarkierenSeparieren
cls
declare ProgramFiles$
ProgramFiles$ = ReadIni$("HKEY_2", "SOFTWAREMicrosoftWindowsCurrentVersion", "ProgramFilesDir")
print ProgramFiles$
waitkey

Funktioniert dann auch ohne IE5, genauso für Temp, System usw. lieber die entsprechende API verwenden, anstatt dieser AllroundFunktion, bzw. wenn, dann eben mit obigen Link vergewissern
 
23.05.2006  
 




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 Dateien (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.
 
24.05.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.895 Betrachtungen

Unbenanntvor 0 min.
Unbenannt30.03.2012

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie