Autor Beitrag
del1312
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Di 17.06.03 13:01 
was willste genau auslesen?
welche user es gibt oder wie oder was?? :D

_________________
"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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Di 17.06.03 13:07 
hm ok war vielleicht blöd erklärt. :oops: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Di 17.06.03 13:20 
os supi, vielen dank :o)
del1312 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Di 17.06.03 15:20 
hm mist ist ich komme mit dem code nicht klar :o( gibt es nicht ne funktion wie paramstr(0) die den pfad vom prog ermittelt. ist kurz und schmerzlos :o)
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Fr 20.06.03 07:31 
ecspooky hat folgendes geschrieben:
hm ok war vielleicht blöd erklärt. :oops: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Fr 20.06.03 08:13 
hi kiwicht :D :

hm das funzt hier nicht, was ist daran falsch?

ausblenden Quelltext
1:
if FileExists('C:\Dokumente und Einstellungen\' + %USERNAME% + '\Eigene Dateien\SN2003.txt')then goto speicherdatei_ok					
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Fr 20.06.03 10:40 
das sind Windows-Eigene Variablen, es dürfte also Funktionieren, wenn du sie DIREKT übergibst.. versuchs mal so:
ausblenden Delphi-Quelltext
1:
if FileExists('C:\Dokumente und Einstellungen\%USERPROFILE%\Eigene Dateien\SN2003.txt')then goto speicherdatei_ok					

und nicht USERNAME, sonder USERPROFILE!
del1312 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190



BeitragVerfasst: Fr 20.06.03 11:02 
nee funzt nicht, er legt dann keine datei an. kommt aber auch keine fehlermeldung. :(
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: 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



BeitragVerfasst: 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:
ausblenden 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
ausblenden Delphi-Quelltext
1:
ShowMessage(GetSpecialFolder(CSIDL_PROFILE));					

Und? War´s so schwer?
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Fr 20.06.03 11:46 
hm, zugegeben, meine Methode ist sehr umständlich, aber dafür jagt mir deine Angst ein :D
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:

ausblenden 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Fr 20.06.03 20:31 
hm, stimmt.
Dann macht das natürlich Sinn... ich verstehe, und gestehe! :)

mfG