首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

修改注册表解决办法

2012-03-22 
修改注册表Private Const REG_OPTION_NON_VOLATILE 0 Key is preserved when system is rebootedPrivat

修改注册表
Private Const REG_OPTION_NON_VOLATILE = 0 ' Key is preserved when system is rebooted
Private Const KEY_ALL_ACCESS = &H3F
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
Private Type SECURITY_ATTRIBUTES
  nLength As Long
  lpSecurityDescriptor As Long
  bInheritHandle As Long
End Type
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Private Const REG_SZ = 1 ' Unicode nul terminated string


Private Sub CreateNewKey(sNewKeyName As String, lPredefinedKey As Long)
  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)
  RegSetValueEx lRetVal, "POP3 User Name", 0, REG_SZ, ByVal "oxo@hotmail.com", Len(strData)
  RegCloseKey (hNewKey)
  End Sub
Private Sub Command1_Click()
CreateNewKey "Software\Microsoft\Internet Account Manager\Accounts\00000002", HKEY_LOCAL_MACHINE
End Sub

上面的代码egSetValueEx的参数cbData填错了

百度后发现----如果写入的数据属于REG_SZ、REG_EXPAND_SZ、REG_MULTI_SZ类型时,则这个长度应该包含chr(0)字符。

我该怎么填cbData这个参数那?

[解决办法]
Private Sub CreateNewKey(sNewKeyName As String, lPredefinedKey As Long)
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)
Dim data() As Byte
data = StrConv("oxo@hotmail.com", vbFromUnicode)

RegSetValueEx hNewKey, "POP3 User Name", 0, REG_SZ, ByVal "oxo@hotmail.com", UBound(data) + 1

RegCloseKey (hNewKey)
End Sub

热点排行