Pfad von "Eigene Dateien" ermitteln

Moin,

ich wollte gerade „Eigene Dateien“ als initialen Pfad für einen Speicher-Dialog angeben, musst aber feststellen, dass ich gar nicht immer weiss, wo der ist (bei mir z.B. ist das eine andere Partition, im Büro hängt es vom Usernamen ab usw.).

Kein Problem, dachte ich, guckst Du mal in den DOS-Umgebungsvariablen. Doch falsch, nix da, zumindest nicht bei mir hier. Kann man also knicken. Ein Blick in die Registry hat dann zwar was ergeben, aber da weiss ich nun auch nicht, ob der Schlüssel allgemeingültig ist (zumal es zwei waren).

Daher die Frage: Wie kann ich mit Sicherheit auf jedem Windows-System (98, 2000, XP) diesen Pfad ermitteln?

Danke und viele Grüße,
Kristian

Hi,

frag mich nicht, wo ich das her habe, habe ich mal mit irgendeinem komischen selbstgeschriebenen Programm ausgelesen (kein Plan mehr wie)

ALLUSERSPROFILE=C:\Dokumente und Einstellungen\All Users
APPDATA=C:\Dokumente und Einstellungen\Matze\Anwendungsdaten
CLIENTNAME=Console
CommonProgramFiles=C:\Programme\Gemeinsame Dateien
COMPUTERNAME=ATHLON
ComSpec=C:\WINDOWS\system32\cmd.exe
HOMEDRIVE=C:
HOMEPATH=\Dokumente und Einstellungen\Matze
LOGONSERVER=\\ATHLON
NUMBER\_OF\_PROCESSORS=1
OS=Windows\_NT
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\WBEM;C:\Programme\ATI Technologies\ATI Control Panel
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR\_ARCHITECTURE=x86
PROCESSOR\_IDENTIFIER=x86 Family 6 Model 10 Stepping 0, AuthenticAMD
PROCESSOR\_LEVEL=6
PROCESSOR\_REVISION=0a00
ProgramFiles=C:\Programme
PROMPT=$P$G
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\DOKUME~1\Matze\LOKALE~1\Temp
TMP=C:\DOKUME~1\Matze\LOKALE~1\Temp
USERDOMAIN=ATHLON
USERNAME=Matze
USERPROFILE=C:\Dokumente und Einstellungen\Matze
windir=C:\WINDOWS

Also der Ordner den du suchst wäre: %userprofile%\Eigene Dateien

Eventuell musst du es mit Anführungsstrichen machen oder in alter 8.3 Schreibweise schreiben.

//edit http://www.german-nlite.de/files/guides/un_tip_samml…

mfg
Matze

Nützt leider nichts

frag mich nicht, wo ich das her habe, habe ich mal mit
irgendeinem komischen selbstgeschriebenen Programm ausgelesen
(kein Plan mehr wie)

Da brauche ich nicht fragen, das ist nämlich einfach nur ein Dump der aktuellen DOS-Umgebungsvariablen, die ich meinte.

Also der Ordner den du suchst wäre: %userprofile%\Eigene Dateien

Genau sowas hoffte ich zu finden, den im Büro gibt es das auch. Aber hier bei mir nicht. Scheint also nicht standardmäßig zu existieren, diese Variable. Wäre sowieso schwierig, weil es mal „Eigene Dateien“ heißt und mal „My Documents“. Und wenn es wie bei mir eine ganze Partition ist, klappt es gar nicht mehr.

Danke trotzdem!

Hallo,

also mit Sicherheit auf allen Systemen ab Windoof2000 kann man diese mit SHGetFolderPath(…) ermitteln. Fuer systeme vor 2K muss man sich die SHFolder.dll von MS besorgen.

Private Declare Function SHGetFolderPath Lib „shfolder“ _
Alias „SHGetFolderPathA“ _
(ByVal hwndOwner As Long, ByVal nFolder As Long, _
ByVal hToken As Long, ByVal dwFlags As Long, _
ByVal pszPath As String) As Long

z.B. RetVal = SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, 0, SHGFP_TYPE_CURRENT, sPath)

Weitere Dokus zu den CSIDLs SHGetFolderPath findet man im PlatformSDK bzw in der MSDN.

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Es knnte so einfach sein…
…wenn du nicht gleich ne Partition als „Eigene dateien“ definiert hast :smile: Wieviele GB haste denn da? *neugierig bin*

Hallo Kristian,

Sub Ordner()
With Application
 MsgBox .DefaultFilePath 'Arbeitsordner
 MsgBox .AltStartupPath 'Zusatzstartordner
End With
End Sub

Zumindest beim Einzel-PC klappt das, Netzwerk bzw Partition weiß ich nicht
Obwohl, wenn du mit Partition nur meinst dass du als Speicherort "F:\ o.ä. angegeben hast müßte es gehen.
Dachte irgendwie , wohl fälschlicherweise, du hättest eine Partition „Eigene dateien“ benannt:smile:

Btw. ich hab noch nen kleinen Altrechner, was brauche ich denn noch um daraus ein netzwerk zu basteln damit ich mich da schlau machen kann wie das mit //server… so klappt.
Langen da die Ethernetkarten wie fürs Internet? Brauche ich da Software wie Novell oder sowas. Wenn ja , hast du sowas noch kostenlos rumfliegen( Ethernetkarten habe ich, ich mein die Software)? Ich denke da nicht an WinXP- sondern Win3.1-Klasse.
Hauptsache die Vernetzung klappt, wie schnell und gut ist völlig egal.
Im Gegenteil, je älter die Software ist, desto überschaubarer ist sie *annehm* Also für mich zum Lernen viel besser als hightec-Software.
Achja, es sollte auf Win98 laufen.
Wenn du keine derarige Software (mehr) hast, dann nenne mir bitte paar Namen und Versionsnummern, dann schau ich mal bei ebay.
Gruß und Danke im Voraus
Reinhard

Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

…wenn du nicht gleich ne Partition als „Eigene dateien“
definiert hast :smile: Wieviele GB haste denn da? *neugierig bin*

Naja, Du hast unten Recht, es ist eben ein Laufwerk, auf das ich die „Eigenen Dateien“ verschoben habe. Sogar ein Unterverzeichnis, sehe ich gerade, stimmt. Also am Ende ist es bei mir „F:\FF“ und nicht „C:\irgendwas\Eigene Dateien“ oderso.

Sub Ordner()
With Application
MsgBox .DefaultFilePath 'Arbeitsordner
MsgBox .AltStartupPath 'Zusatzstartordner
End With
End Sub

Aha, diese Eigenschaft war mir noch nicht aufgefallen. Muss ich mal reingucken. Klingt aber vielversprechend.

Was Netzwerk-Zeugs angeht, kann ich Dir leider gar nichts sagen. Damit habe ich mich noch nie beschäftigt, zumindest nicht privat. Ich kenne nur das Ford-Intranet ein bisschen, aber das nützt Dir hier wenig :wink:

Kristian

Hallo,

Hi Peter,

danke auch für diesen Hinweis. Dem werde ich auf jeden Fall mal nachgehen. Ich stelle immer wieder fest, dass es sehr oft nur Zufall ist, wenn man auf eine externe DLL- oder API-Funktion stößt, die man von VB/VBA/VBS aus nutzen kann. Ist leider nicht so gut dokumentiert wie die Standard-Funktionen, zumindest nicht in einer Weise, dass man schnell was findet. Aber ich werde nochmal im MSDN wühlen und mir noch ein paar Details dazu besorgen.

Danke!
Kristian

also mit Sicherheit auf allen Systemen ab Windoof2000 kann man
diese mit SHGetFolderPath(…) ermitteln. Fuer systeme vor 2K
muss man sich die SHFolder.dll von MS besorgen.

Private Declare Function SHGetFolderPath Lib „shfolder“ _
Alias „SHGetFolderPathA“ _
(ByVal hwndOwner As Long, ByVal nFolder As Long, _
ByVal hToken As Long, ByVal dwFlags As Long, _
ByVal pszPath As String) As Long

z.B. RetVal = SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, 0,
SHGFP_TYPE_CURRENT, sPath)

Weitere Dokus zu den CSIDLs SHGetFolderPath findet man im
PlatformSDK bzw in der MSDN.

Tschau
Peter

Sub Ordner()
With Application
MsgBox .DefaultFilePath 'Arbeitsordner
MsgBox .AltStartupPath 'Zusatzstartordner
End With
End Sub

Hm … also war das doch nicht nur eine düstere Ahnung. Das Application-Objekt gibt´s bei VB nicht, wie´s aussieht. Ich kannte es bisher auch nur von VBA. War also leider doch nix. Aber die Geschichte mit dem API-Aufruf vom anderen Posting werde ich mal weiterverfolgen. SHGet_Special_FolderPath ist aber offenbar das Stichwort. Mal gucken.

Kristian

Funktioniert wunderbar!
Hallo Peter,

Dein Posting allein war´s noch nicht :wink:, aber wie Du schon sagtest, war ich im MSDN fündig geworden, was die fehlenden Konstanten-Defs angeht. Und wie fast immer half hier Google noch mit einem Beispiel nach. Moment … hier:

http://www.vbapihelpline.de/ref/funca.php4?Func=SHGe…

Zusammengeschnitten auf das, was ich brauche, und etwas modifiziert waren´s bloss noch ein paar Zeilen. Geht übrigens auch bei meinem 98.

Danke,
Kristian

Hallo Kristian,

das mit der Dokumentation stimmt so nicht ganz, alle oeffentlichen Funktionen der System-API sind im Platform SDK relativ gut beschrieben. Mit der Doku zu VB(A) hat das halt nichts zu tun, da hier nur die Sprachelemente von Visual Basic beschieben sind. Zu diesem Zweck ist es einfach sinnvoll sich ne Version der MSDN auf CD oder DVD zu besorgen, dann hat man ein umfangreiches Nachschlagewerk unter anderem auch fuer die System-API. Auserdem sind auf der MSDN-DVD fuer viele Belange der API auch recht anschauliche Beispiele.

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Du hast Recht, es ist alles da, und wenn man es erst einmal gefunden hat, kommt man auch gut mit klar (meistens). Aber genau das meinte ich mit „zumindest nicht in einer Weise, dass man schnell was findet“ - wenn man nicht genau weiß, wonach man sucht, wird´s schwierig. Oder wenn man einfach mal gucken will, was alles möglich ist.

Kristian

PS: Ich habe eine ziemlich alte Version auf 2 CDs.

Hallo Kristian,

das mit der Dokumentation stimmt so nicht ganz, alle
oeffentlichen Funktionen der System-API sind im Platform SDK
relativ gut beschrieben. Mit der Doku zu VB(A) hat das halt
nichts zu tun, da hier nur die Sprachelemente von Visual Basic
beschieben sind. Zu diesem Zweck ist es einfach sinnvoll sich
ne Version der MSDN auf CD oder DVD zu besorgen, dann hat man
ein umfangreiches Nachschlagewerk unter anderem auch fuer die
System-API. Auserdem sind auf der MSDN-DVD fuer viele Belange
der API auch recht anschauliche Beispiele.

Tschau
Peter

Hallo Kristian,

Du hast Recht, es ist alles da, und wenn man es erst einmal
gefunden hat, kommt man auch gut mit klar (meistens). Aber
genau das meinte ich mit „zumindest nicht in einer Weise,
dass man schnell was findet“
- wenn man nicht genau weiß,
wonach man sucht, wird´s schwierig. Oder wenn man einfach mal
gucken will, was alles möglich ist.

Sieh Dir mal die API-Guide an. Übersichtlich und alles mit lauffähigen Beispielprogrammen. Schön zum ‚Blättern‘ um mal zu sehen, was so alles möglich ist. … z.B. gefunden bei:
http://www.soft-ware.net/hobby/programmierung/refere…

Gruß, Rainer

API-Guide ist gut!
Ist wirklich gut, der API-Guide!

Aber eine Frage mal: Ist das ´ne VB-Version, oder ist dieser API-Guide sogar in erster Linie für VB-User geschrieben worden? Es ist wegen der Beispiele, die ja alle für VB zu sein scheinen. Oder habe ich zufällig immer nur solche gesehen?

Wie auch immer - ich find´s gut :smile:

Kristian