kann mir jemand einen Tip geben, wie ich unter Excel die Registry-Daten
lesen kann.
Unter Word geht dies problemlos, z.B. mit
System.PrivateProfileString("", "HKEY_local_Machine\Network\Logon",
"username")
Da es unter Excel-VBA leider keine entsprechende Funktion geht, wäre ich für
einen Tip
dankbar, wie man die Windows-API hierfür einsetzen kann.
Danke im voraus
Frank
Wenn du nicht an einer bestimmten Stelle in der Registry etwas schreiben
oder lesen möchtest, sondern an dem von VBA vorgesehenen Platz.
HKEY_CURRENT_USER/Software/VB und VBA Program Settings/DEIN PROGRAMM dann
brauchst Du dazu keine API-Funktionen. Dafür gibt es die Anweisungen
GetSetting und SaveSetting.
--
Helma Spona
- freie Autorin -
(Data Becker, Redmond's, VBA Magazin, bhv, WEKA ...)
Frank Wiesner <FWiesner...@t-online.de> schrieb in im Newsbeitrag:
7piqsu$lc9$1...@news05.btx.dtag.de...
Gruß Frank
siehe dazu Subject: "Registry auslesen"
vom 5.8.99
mfg Peter
Frank Wiesner schrieb in Nachricht
<7piqsu$lc9$1...@news05.btx.dtag.de>...
Hallo Frank.
Es gibt mehrere Möglichkeiten.
1. Application.Username
2. Über die API GetUserName
3. Den Schlüssel auslesen
Hier ein Beispiel:
Private Declare Function RegQueryValueExString Lib "advapi32.dll" Alias _
"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
String, ByVal lpReserved As Long, lpType As Long, _
ByVal lpData As String, lpcbData As Long) As Long
Private Declare Function RegQueryValueExByte Lib "advapi32.dll" Alias _
"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _
String, ByVal lpReserved As Long, lpType As Long, _
lpData As Any, lpcbData As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
"RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
ByVal ulOptions As Long, ByVal samDesired As Long, phkResult _
As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long
Declare Function GetUserName& Lib "advapi32.dll" Alias "GetUserNameA" (ByVal _
lpBuffer As String, nSize As Long)
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const KEY_QUERY_VALUE = &H1
Sub SchlüsselinhaltLesen()
Dim Hauptschlüssel$, Schlüssel$, Schlüsselinhalt$
Dim Länge&, dummy
Dim Schlüsselhandle&, Typ&
Hauptschlüssel = "Network\Logon"
Schlüssel = "username"
dummy = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
Hauptschlüssel, 0&, KEY_QUERY_VALUE, Schlüsselhandle)
If dummy <> 0 Then GoTo fehlerbehandlung
dummy = RegQueryValueExString(Schlüsselhandle, _
Schlüssel, 0&, Typ, Schlüsselinhalt, Länge)
Schlüsselinhalt = String(Länge, 0)
dummy = RegQueryValueExString(Schlüsselhandle, _
Schlüssel, 0&, Typ, Schlüsselinhalt, Länge)
Schlüsselinhalt = Left(Schlüsselinhalt, Länge - 1)
fehlerbehandlung:
dummy = RegCloseKey(Schlüsselhandle)
End Sub
Sub UsernameLesen()
Dim Username$, Länge&
Username = Application.Username
Username = String(256, 0)
Länge = 255
Call GetUserName(Username, Länge)
Username = Left(Username, Länge - 1)
End Sub
MfG
Michael
Frank Wiesner <FWiesner...@t-online.de> schrieb in im Newsbeitrag:
7pj3kn$40i$1...@news06.btx.dtag.de...
> Danke für die Antwort, aber ich möchte eben genau den usernamen der
Netzanmeldung lesen ..
.. wie wäre es hiermit ?
'API-Deklaration
' Ermittlung des Benutzers
' Diese Funktion muss in einer Zeile deklariert werden.
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal
lpBuffer As String, nSize As Long) As Long
' Variablendeklaration und aufrufende Funktion
Dim s$, i As Integer
' Office-Funktion, die die Windows-Standardschnittstelle anruft
Function GetUsrName() As String
s = Space$(50)
i = GetUserName(s, 50)
GetUsrName = Left(s, Len(Trim(s)) - 1)
End Function
' Testprozedur
Sub Testprozedur()
MsgBox GetUsrName
End Sub
--
MfG
Andreas Hensen
________________________________________________________________
Andreas Hensen mailto:andreas...@quantum.de
SER Quantum GmbH Tel. (0231) 97 49 - 259
Fax (0231) 97 49 - 3
... gut, dass wir verglichen haben !
deine Antwort hat mir sehr geholfen. Die Lösung mit GetUserName ist
natürlich wesentlich eleganter als mein Ansatz, zumal man sich keinen Kopf
um die unterschiedlichen Windows-Varianten machen muß.
Die Methode zum Auslesen der Registry zeigt mir, dass ich schon fast auf dem
richtigen Weg war. Ich bin aber an den Werten für die Konstanten
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const KEY_QUERY_VALUE = &H1
gescheitetert.
Wo findet man sowas? Hast Du einen Literaturtip?
Vielen Dank
Frank
Wenn es Dir nur um den Usernamen geht: Der müßte doch auch aus der
entsprechenden Windows-Systemvariable auszulesen sein, oder?
AktuellerUserName = Environ("Username")
(Geht übrigens auch in Word, etc.!)
Hope it helps,
Servus aus Wien,
-Robert Gelbmann-
Gruß Frank
> Die Umgebungsvariable USERNAME wird bei uns nur unter NT gesetzt. Unter
> Win9x scheint dies im NT-Netzwerk ein Problem zu sein.
Danke für die Info!