Hallo Leute,
ich hab im Zuge eines Auftrags das Problem, dass ich die zurzeit verwendete Domäne auslesen sollte. Dies wäre am einfachsten über die IP zu handhaben, dachte ich mir.
Nun kann ich zurzeit leider keine Rückfrage halten, daher kann ich mir nicht sicher sein, ob ich den WMI-Dienst als gegeben sehen kann resp. das er läuft.
Es sollte natürlich immer und überall funktionieren...
Ich habe drei Varianten ausprobiert:
WMI:
Klappt soweit gut, wie gesagt, ich bin nicht sicher, iwe ich das Objekt dann weiter verarbeiten kann, auch auf welchen System das wie gut läuft ist recht unklar. Ausserdem eben: WMI.
Zweite Idee:
Aus den Tiefen von Google gefunden:
Diesen Reg gibts gar nicht, aber die Domain wird schon über UserDomain ausgelesen.
Leider habe ich das Problem, dass nicht die Domain, sondern der PC Name ausgelesen wird¿ Oder verwechsel ich hier was?
Dritte und komplexeste Variante:
APIs:
Scheint das Komplexeste zu sein, doch auch hier wird mir irgendwie der Computername ausgegeben...
Ich bin recht unschlüssig, daher wollte ich mal fragen, wie Ihr das Problem gelöst habt. Vor allem, dass bei zwei Varianten der Computername ausgelesen wird, irritiert mich sehr.
ich hab im Zuge eines Auftrags das Problem, dass ich die zurzeit verwendete Domäne auslesen sollte. Dies wäre am einfachsten über die IP zu handhaben, dachte ich mir.
Nun kann ich zurzeit leider keine Rückfrage halten, daher kann ich mir nicht sicher sein, ob ich den WMI-Dienst als gegeben sehen kann resp. das er läuft.
Es sollte natürlich immer und überall funktionieren...
Ich habe drei Varianten ausprobiert:
WMI:
Code:
Dim oNameSpace As Object
Dim oDomain As Object
On Error GoTo ErrHandler
Set oNameSpace = GetObject("WinNT:")
For Each oDomain In oNameSpace
MsgBox oDomain.Name
Next
On Error GoTo 0
Exit Sub
Klappt soweit gut, wie gesagt, ich bin nicht sicher, iwe ich das Objekt dann weiter verarbeiten kann, auch auf welchen System das wie gut läuft ist recht unklar. Ausserdem eben: WMI.
Zweite Idee:
Aus den Tiefen von Google gefunden:
Code:
Dim wshShell As Object
Dim wshNetwork As Object
Dim sDomain As String
Set wshNetwork = CreateObject("WScript.Network")
sDomain = wshNetwork.UserDomain
Set wshNetwork = Nothing
If sDomain = "" Then 'probably w9x system
Set wshShell = CreateObject("WScript.Shell")
sDomain = wshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Services\MSNP32\NetworkProvider\AuthenticatingAgent")
End If
Set wshShell = Nothing
MsgBox sDomain
Diesen Reg gibts gar nicht, aber die Domain wird schon über UserDomain ausgelesen.
Leider habe ich das Problem, dass nicht die Domain, sondern der PC Name ausgelesen wird¿ Oder verwechsel ich hier was?
Dritte und komplexeste Variante:
APIs:
Code:
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 RegQueryValueEx& 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)
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Const HKLM = &H80000002
Private Const ERROR_SUCCESS = 0&
Private Const KEY_ALL_ACCESS = &HF003F
Private Const REG_SZ = 1
Private Const MAX_SIZE = 1024
Private Const w9xDomainKey = "SYSTEM\CurrentControlSet\Services\MSNP32\NetworkProvider"
Private Const w9xGroupKey = "SYSTEM\CurrentControlSet\Services\VxD\VNETSUP"
Private Function GetUserDomain() As String
Dim sDomain As String
'First, try using Evironment variable (works for NT system)
sDomain = Environ$("USERDOMAIN")
'If fail, try for w9x domain registry key
If sDomain = "" Then sDomain = GetRegValueStr(w9xDomainKey, "AuthenticatingAgent")
'And finally, try with w9x working group key
If sDomain = "" Then sDomain = GetRegValueStr(w9xGroupKey, "Workgroup")
GetUserDomain = sDomain
MsgBox sDomain
End Function
Private Function GetRegValueStr(sKey As String, sSubKey As String) As String
Dim hKey As Long, sTemp As String
GetRegValueStr = ""
If RegOpenKeyEx(HKLM, sKey, 0&, KEY_ALL_ACCESS, hKey) <> ERROR_SUCCESS Then Exit Function
sTemp = Space$(MAX_SIZE)
If RegQueryValueEx(hKey, sSubKey, 0&, REG_SZ, ByVal sTemp, MAX_SIZE) = ERROR_SUCCESS Then
GetRegValueStr = Trim$(StripNulls(sTemp))
End If
RegCloseKey hKey
End Function
Private Function StripNulls(ByVal sText As String) As String
Dim nPosition&
StripNulls = sText
nPosition = InStr(sText, vbNullChar)
If nPosition Then StripNulls = Left$(sText, nPosition - 1)
If Len(sText) Then If Left$(sText, 1) = vbNullChar Then StripNulls = ""
End Function
Scheint das Komplexeste zu sein, doch auch hier wird mir irgendwie der Computername ausgegeben...
Ich bin recht unschlüssig, daher wollte ich mal fragen, wie Ihr das Problem gelöst habt. Vor allem, dass bei zwei Varianten der Computername ausgelesen wird, irritiert mich sehr.