# Shell Befehl



## cobfreaky (17. Mai 2008)

Hey Leute.

Ich möchte meinen "Shell" -Befehl verallgemeinern. In meinem Code beispiel ist der Shell Befehl für ein einfaches Text Dokument.


```
Shell "C:\Dokumente und Einstellungen\Robin\Desktop\test.txt"
```

Wie ihr seht, ist mein Benutzername Hervorgehoben. Da liegt auch mein Problem. Nicht jeder hat den Benutzernamen "Robin". Wie kann ich also den Befehl verallgemeinern, sodass z.B auch Benuter mit dem Namen "Matthias" die Datei öffnen können?

Gruß,
Cobfreaky


----------



## derzuerner (17. Mai 2008)

Ich kann dir da nicht wirklich weiterhelfen... ich denke eigentlich sollte es eine Eleganter lösung geben...

Aber du könntest z.B.  den Benutzernamen Auslesen 
Ich habe hier einen Beispiel Code wie man das mache (Ungetestet)


> ivate Declare Function GetUserName _
> Lib "advapi32.dll" _
> Alias "GetUserNameA" _
> ( _
> ...



Und dann könnte das evt so funktionieren?


> Shell "C:\Dokumente und Einstellungen\" & UserName & "\Desktop\test.txt"




Wie gesagt ist jetz nur so ein Gedanke  Versuchs halt mal aus.


----------



## cobfreaky (17. Mai 2008)

Danke schonmal. Leider war das nicht dass, was ich gesucht habe.


----------



## Masterclavat (17. Mai 2008)

Ich glaube da könnte dir "Environ" helfen. Damit lassen sich Umgebungsvariablen benutzen.


```
Shell Environ("USERPROFILE")  & "\Desktop\Test.bat", vbNormalFocus
```

Damit lassen sich aber keine .txt Dateien öffnen, sondern nur .bat, .exe, .com oder .pif.
Um auch andere Dateien öffnen zu können, benötigst du die API ShellExecute. 
Hier die Deklaration


```
Private Declare Function ShellExecute Lib "shell32.dll" _
                 Alias "ShellExecuteA" ( _
                 ByVal hwnd As Long, _
                 ByVal lpOperation As String, _
                 ByVal lpFile As String, _
                 ByVal lpParameters As String, _
                 ByVal lpDirectory As String, _
                 ByVal nShowCmd As Long) As Long
```

So rufst du sie auf:


```
Call ShellExecute(Me.hwnd, "Open", Environ("USERPROFILE")  & "\Desktop\Test.txt", "", vbNullString, 1)
```

Hoffe das war das was du suchtest, bei Fragen frag einfach 

PS: Um alle Umgebungsvariablen anzusehen, gib einfach in der Eingabeaufforderung den Befehl "Set" (ohne Anführungszeichen) ein.


----------

