Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, 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) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_SZ = 1
Dim Ret
Private Sub Command1_Click() '查看
Ret = GetString(HKEY_LOCAL_MACHINE, "system\currentcontrolset\services\cdrom\ENUm", "0")
If Ret <> "" Then
If InStr(Ret, "CD-RW") > 0 Then
MsgBox "刻录机"
Else
MsgBox "普通光驱"
End If
Else
MsgBox "无光驱"
End If
End Sub
Function GetString(hKey As Long, strPath As String, strValue As String)
RegOpenKey hKey, strPath, Ret
GetString = RegQueryStringValue(Ret, strValue)
RegCloseKey Ret
End Function
Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
Dim lResult&, lValueType&, strBuf$, lDataBufSize&
lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
If lResult = 0 Then
If lValueType = REG_SZ Then
strBuf = String(lDataBufSize, Chr$(0))
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
If lResult = 0 Then RegQueryStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0)) - 1)
ElseIf lValueType = REG_BINARY Then
Dim strData%
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, strData, lDataBufSize)
If lResult = 0 Then RegQueryStringValue = strData
End If
End If
End Function