2000系统和98系统的注册表操作有什么区别,为什么我在98下能正常运行的程
序到了2000下就不能正常修改注册表了呢?
接上贴
-----------------------------
Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)
Description:
This Function will Delete a key
Syntax:
DeleteKey Location, KeyName
Location must equal HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
, HKEY_USERS
KeyName is name of the key you wish to delete, it may include subkeys (example "Key1\SubKey1")
Dim lRetVal As Long result of the SetValueEx function
Dim hKey As Long handle of open key
open the specified key
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
RegCloseKey (hKey)
End Function
Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
Description:
This Function will delete a value
Syntax:
DeleteValue Location, KeyName, ValueName
Location must equal HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
, HKEY_USERS
KeyName is the name of the key that the value you wish to delete is in
, it may include subkeys (example "Key1\SubKey1")
ValueName is the name of value you wish to delete
Dim lRetVal As Long result of the SetValueEx function
Dim hKey As Long handle of open key
open the specified key
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = RegDeleteValue(hKey, sValueName)
RegCloseKey (hKey)
End Function
Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
Dim lValue As Long
Dim sValue As String
Select Case lType
Case REG_SZ
sValue = vValue
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
Case REG_DWORD
lValue = vValue
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
End Select
End Function
Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String
On Error GoTo QueryValueExError
Determine the size and type of data to be read
lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
If lrc <> ERROR_NONE Then Error 5
Select Case lType
For strings
Case REG_SZ:
sValue = String(cch, 0)
lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
If lrc = ERROR_NONE Then
vValue = Left$(sValue, cch)
Else
vValue = Empty
End If
For DWORDS
Case REG_DWORD:
lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
If lrc = ERROR_NONE Then vValue = lValue
Case Else
all other data types not supported
lrc = -1
End Select
QueryValueExExit:
QueryValueEx = lrc
Exit Function
QueryValueExError:
Resume QueryValueExExit
End Function
Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)
Description:
This Function will create a new key
Syntax:
QueryValue Location, KeyName
Location must equal HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
, HKEY_USERS
KeyName is name of the key you wish to create, it may include subkeys (example "Key1\SubKey1")
Dim hNewKey As Long handle to the new key
Dim lRetVal As Long result of the RegCreateKeyEx function
lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)
RegCloseKey (hNewKey)
End Function
Sub Main()
Examples of each function:
CreateNewKey HKEY_CURRENT_USER, "TestKey\SubKey1\SubKey2"
SetKeyValue HKEY_CURRENT_USER, "TestKey\SubKey1", "Test", "Testing, Testing", REG_SZ
MsgBox QueryValue(HKEY_CURRENT_USER, "TestKey\SubKey1", "Test")
DeleteKey HKEY_CURRENT_USER, "TestKey\SubKey1\SubKey2"
DeleteValue HKEY_CURRENT_USER, "TestKey\SubKey1", "Test"
End Sub
Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
Description:
This Function will set the data field of a value
Syntax:
QueryValue Location, KeyName, ValueName, ValueSetting, ValueType
Location must equal HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
, HKEY_USERS
KeyName is the key that the value is under (example: "Key1\SubKey1")
ValueName is the name of the value you want create, or set the value of (example: "ValueTest")
ValueSetting is what you want the value to equal
ValueType must equal either REG_SZ (a string) Or REG_DWORD (an integer)
Dim lRetVal As Long result of the SetValueEx function
Dim hKey As Long handle of open key
open the specified key
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
RegCloseKey (hKey)
End Function
Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)
Description:
This Function will return the data field of a value
Syntax:
Variable = QueryValue(Location, KeyName, ValueName)
Location must equal HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_lOCAL_MACHINE
, HKEY_USERS
KeyName is the key that the value is under (example: "Software\Microsoft\Windows\CurrentVersion\Explorer")
ValueName is the name of the value you want to access (example: "link")
Dim lRetVal As Long result of the API functions
Dim hKey As Long handle of opened key
Dim vValue As Variant setting of queried value
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = QueryValueEx(hKey, sValueName, vValue)
MsgBox vValue
QueryValue = vValue
RegCloseKey (hKey)
End Function