Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Mit Excel-VBA in der Registry lesen

492 views
Skip to first unread message

Frank Wiesner

unread,
Aug 20, 1999, 3:00:00 AM8/20/99
to
Hallo,

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

Helma Spona

unread,
Aug 20, 1999, 3:00:00 AM8/20/99
to
hallo 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...

Frank Wiesner

unread,
Aug 20, 1999, 3:00:00 AM8/20/99
to
Danke für die Antwort, aber ich möchte eben genau den usernamen der
Netzanmeldung lesen, dieser steht nunmal unter
"HKEY_local_Machine\Network\Logon".

Gruß Frank

Peter Dorigo

unread,
Aug 20, 1999, 3:00:00 AM8/20/99
to
Hallo Frank

siehe dazu Subject: "Registry auslesen"
vom 5.8.99

mfg Peter


Frank Wiesner schrieb in Nachricht
<7piqsu$lc9$1...@news05.btx.dtag.de>...

Michael Schwimmer

unread,
Aug 20, 1999, 3:00:00 AM8/20/99
to
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, dieser steht nunmal unter
> "HKEY_local_Machine\Network\Logon".

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

Andreas Hensen

unread,
Aug 20, 1999, 3:00:00 AM8/20/99
to
Hallo,

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 !

Frank Wiesner

unread,
Aug 20, 1999, 3:00:00 AM8/20/99
to
Hallo Michael,

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

Robert Gelbmann

unread,
Aug 20, 1999, 3:00:00 AM8/20/99
to
Hallo 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-

---
<gel....@roehrenbacher.at>


Frank Wiesner

unread,
Aug 23, 1999, 3:00:00 AM8/23/99
to
Die Umgebungsvariable USERNAME wird bei uns nur unter NT gesetzt. Unter
Win9x scheint dies im NT-Netzwerk ein Problem zu sein.

Gruß Frank


Robert Gelbmann

unread,
Aug 23, 1999, 3:00:00 AM8/23/99
to
Hallo 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!

0 new messages