| Autor |
Beitrag |
del1312
      
Beiträge: 190
|
Verfasst: Di 17.06.03 13:00
Hi Leute,
ich möchte unter W2K den Pfad des Users auslesen. Also bei W2K ist das ja unter:
C:\Dokumente und Einstellungen\User1
C:\Dokumente und Einstellungen\User2
usw.
Wie kann ich diesen Pfad auslesen?
Danke schon mal ;o)
|
|
foxy
      
Beiträge: 814
Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
|
Verfasst: Di 17.06.03 13:01
was willste genau auslesen?
welche user es gibt oder wie oder was?? 
_________________ "Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
|
|
del1312 
      
Beiträge: 190
|
Verfasst: Di 17.06.03 13:07
hm ok war vielleicht blöd erklärt.  ich will nen userspezifische datei dort ablegen. der pfad bis hier hin ist ok C:\Dokumente und Einstellungen\ ich muss also den aktuellen user noch dranhängen und wie ich den bekomme weiss ich nicht.
mir fällt grad ein, wenn jetzt jemand nicht c sondern festplatte d hat dann funzt das prog ja nicht, also wäre noch klasse wie ich den userpfad auch noch direkt auslesen
|
|
foxy
      
Beiträge: 814
Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
|
Verfasst: Di 17.06.03 13:11
aso ok ... pass auf ich hab da gerade was gefunden was dir in deinen beiden Problemen weiterhilft!
www.swissdelphicente.../showcode.php?id=233
_________________ "Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
|
|
del1312 
      
Beiträge: 190
|
Verfasst: Di 17.06.03 13:20
os supi, vielen dank  )
|
|
del1312 
      
Beiträge: 190
|
Verfasst: Di 17.06.03 15:20
hm mist ist ich komme mit dem code nicht klar  ( gibt es nicht ne funktion wie paramstr(0) die den pfad vom prog ermittelt. ist kurz und schmerzlos  )
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: Fr 20.06.03 07:31
| ecspooky hat folgendes geschrieben: | hm ok war vielleicht blöd erklärt. ich will nen userspezifische datei dort ablegen. der pfad bis hier hin ist ok C:\Dokumente und Einstellungen\ ich muss also den aktuellen user noch dranhängen und wie ich den bekomme weiss ich nicht.
mir fällt grad ein, wenn jetzt jemand nicht c sondern festplatte d hat dann funzt das prog ja nicht, also wäre noch klasse wie ich den userpfad auch noch direkt auslesen |
es gibt ja unter Windows diese Shell-Platzhalter, %windir% dürfte dir zum Beispiel was sagen...
genauso klappt das natürlich auch mit dem zur Zeit angemeldeten Benutzer (sehr wichtig in Domänen-Netzwerken wenn man mit unterschiedlichen Nutzerprofilen etc. arbeitet)
Und zwar heisst der Platzhalter dann: %userprofil%Und um auf das passende Laufwerk zu kommen nimmst du einfach: %systemdrive%
als Beispiel mal n Verzeichnisswechsel:
| Zitat: | C:\Dokumente und Einstellungen>cd %userprofile%
C:\Dokumente und Einstellungen\arbeitsplatz.nutzer1> |
Hoffe das hilft dir weiter...
mfG
|
|
del1312 
      
Beiträge: 190
|
Verfasst: Fr 20.06.03 08:13
hi kiwicht  :
hm das funzt hier nicht, was ist daran falsch?
Quelltext 1:
| if FileExists('C:\Dokumente und Einstellungen\' + %USERNAME% + '\Eigene Dateien\SN2003.txt')then goto speicherdatei_ok |
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: Fr 20.06.03 10:40
das sind Windows-Eigene Variablen, es dürfte also Funktionieren, wenn du sie DIREKT übergibst.. versuchs mal so:
Delphi-Quelltext 1:
| if FileExists('C:\Dokumente und Einstellungen\%USERPROFILE%\Eigene Dateien\SN2003.txt')then goto speicherdatei_ok |
und nicht USERNAME, sonder USERPROFILE!
|
|
del1312 
      
Beiträge: 190
|
Verfasst: Fr 20.06.03 11:02
nee funzt nicht, er legt dann keine datei an. kommt aber auch keine fehlermeldung. 
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: Fr 20.06.03 11:26
hm.. habs jetzt auch mal getestet... seltsam.
Wie gesagt, funktionieren tut's schon, aber scheinbar nur unter der cmd-line... schade
eins hab ich noch rausgefunden.... %userprofile% übergibt nicht nur den namen, sondern den kompletten Pfad zu dem aktuellen profil...
aber wie das unter Delphi einsetzbar ist... keine Ahnung....
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 20.06.03 11:33
Vielleicht, weil fileexists in erster Linie einen String erwartet, der auf eine Datei zeigt? Wenn du Environment-Variablen verwenden willst, dann musst du sie erst parsen ( GetEnvironmentVariable).
Ich frage mich aber, warum du diesen Weg nimmst? Im SwissDelphiCenter gibt es passenden Code über Shell-Funktionen (der obere Teil, vor dem Registry-Zeug). Etwas ähnliches findest du hier im Forum auch: Wie kann ich ... spezielle Windows-Ordner öffnen?
Die für dich interessante Konstante nennt sich CSIDL_PROFILE. (Du solltest ernsthaft einen Blick ins MSDN oder PSDK von Microsoft erwägen!) Nehmen wir die Funktion "GetDeskTopPath" aus dem SDC und gestalten sie ein bisschen um:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| function GetSpecialFolder(iGUID: integer): string; var shellMalloc : IMalloc; ppidl : PItemIdList; begin ppidl := nil; try if SHGetMalloc(shellMalloc) = NOERROR then begin SHGetSpecialFolderLocation(Form1.Handle, iGUID, ppidl); SetLength(Result, MAX_PATH); if not SHGetPathFromIDList(ppidl, PChar(Result)) then raise exception.create('SHGetPathFromIDList failed : invalid pidl'); SetLength(Result, lStrLen(PChar(Result))); end; finally if ppidl <> nil then shellMalloc.free(ppidl); end; end; |
(ungetestet!)
Jetzt liefert sie (hoffentlich) den Pfad zurück, dessen GUID du angibst. Im Fall des Profilpfades also
Delphi-Quelltext 1:
| ShowMessage(GetSpecialFolder(CSIDL_PROFILE)); |
Und? War´s so schwer?
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: Fr 20.06.03 11:46
hm, zugegeben, meine Methode ist sehr umständlich, aber dafür jagt mir deine Angst ein
Aber mal zu dem "GetEnviromentVariable": Wenn das so auch geht, wär das dann nicht vielleicht sogar der kürzere Weg?
Bin das eben mal durchgegangen, das würde dann so aussehen:
Delphi-Quelltext 1: 2:
| myvar := GetEnvironmentVariable('userprofile'); if FileExists(myvar + '\test.txt') then ShowMessage('Gefunden!'); |
Wo genau liegt nun der Vorteil der beiden Möglichkeiten?
mfG
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 20.06.03 16:32
Die Variable %userprofile% gibt es IMHO unter Windows 9x nicht. Zumindest nicht unter dem Multi-User-Win98, in das ich gerade mal reingeschaut habe. Ich würde daher mal sagen, dass hier die Idee mit dem Abfragen der Variablen versagt.
Dagegen funktioniert die Shell-Funktion sowohl unter 9x- als auch unter NT-Systemen und liefert in beiden Fällen den Profilpfad des angemeldeten Users zurück.
Ich finde es auch nicht beängstigend - nur gewöhnungsbedürftig. 
|
|
kiwicht
      
Beiträge: 1021
Win 7, MacOS
Delphi x, VBA, PHP, ...
|
Verfasst: Fr 20.06.03 20:31
hm, stimmt.
Dann macht das natürlich Sinn... ich verstehe, und gestehe!
mfG
|
|