This article explains how to use a Visual Basic application to access the registry on a remote computer in conjunction with the Windows application programming interface (API).
You need the following hardware and software to perform the procedures in this article:
A Microsoft Windows XP, Microsoft Windows 2000, or Microsoft Windows NT 4.0-based computer
Visual Basic 6.0
NOTE: If the remote registry is on a system that is running Windows NT 4.0, Windows 2000, or Windows XP, you must run the code from an account that has permission to read that registry.
Add the following code to declare the entry points for the registry functions in the Windows application programming interface (API):
Private Declare Function RegConnectRegistry Lib "advapi32.dll" _
Alias "RegConnectRegistryA" _
(ByVal lpMachineName As String, _
ByVal hKey As Long, _
phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey 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 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
Add the following global variable declaration:
Private hRemoteReg As Long
Add the following code to handle the Form_Load event. This code calls the RegConnectRegistry function to connect to the remote registry. Replace the \\RemoteMachineName parameter with the name of the computer whose registry you want to access:
Private Sub Form_Load()
Dim lRet As Long
'Connect to the remote registry
lRet = RegConnectRegistry("\\RemoteMachineName", _
HKEY_LOCAL_MACHINE, _
hRemoteReg)
If (lRet = ERROR_SUCCESS) Then
MsgBox "Successfully connected to remote registry"
Else
MsgBox "Error:" & Err.LastDllError
Unload Me
Exit Sub
End If
End Sub
Add the following code to handle the Form_Unload event:
Private Sub Form_Unload(Cancel As Integer)
Dim lRet As Long
If hRemoteReg <> 0 Then
lRet = RegCloseKey(hRemoteReg)
End If
End Sub
In the Form Designer, add a Command control to the form. The control has the default name of Command1.
Double-click Command1 to create a click handler for the command button. Add the following code to the click handler function:
Private Sub Command1_Click()
Dim lRetVal As Long
Dim hKey As Long
Dim sValue As String
lRetVal = RegOpenKeyEx(hRemoteReg, _
"HARDWARE\DESCRIPTION\System", 0, KEY_QUERY_VALUE, hKey)
If lRetVal <> ERROR_SUCCESS Then
MsgBox "Cannot open key"
Else
sValue = String(255, " ")
lRetVal = RegQueryValueExString(hKey, _
"SystemBIOSVersion", 0&, REG_SZ, sValue, 255)
If lRetVal <> ERROR_SUCCESS Then
MsgBox "Cannot query value"
Else
MsgBox sValue
End If
lRetVal = RegCloseKey(hKey)
If lRetVal <> ERROR_SUCCESS Then
MsgBox "Cannot close key"
End If
End If
End Sub
To verify this registry value, run regedit.exe on the remote computer. In Registry Editor, click Find on the Edit menu. Type SystemBIOSVersion, and then click Find Next. After a short pause, Registry Editor displays the value for this key; verify that this is the same value displayed in your Visual Basic application.