读写VBA中的registry

我在C#中看到了这一行,并且正在尝试使其适应VBA:

Microsoft.Win32.Registry.SetValue(@"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR", "Start", 4,Microsoft.Win32.RegistryValueKind.DWord); 

我在这里输了一些错误:

运行时间:5 – 无效的过程调用)

当我使用默认的i_Typestring“REG_SZ”,而不是“开始”,那么我得到一个regkey相关的错误:

运行时 – -2147024891 [80070005]无效的根

我的代码:

 Dim i_RegKey As String, i_Value As String, i_Type As String Dim myWS As Object i_Type = "REG_SZ" ' Optional 'access Windows scripting Set myWS = CreateObject("WScript.Shell") 'write registry key i_RegKey = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR\Start" i_Value = "4" i_Type = "REG_DWORD" myWS.RegWrite i_RegKey, i_Value, i_Type 

我认为这里的问题是macros没有写入registry的权限。

更多信息在这个页面 。 我可以使用WScript对象读取键值:

 Debug.Print CreateObject("WScript.Shell").RegRead("HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR\Start") 

写(如果你有权限,它应该工作):

 CreateObject("WScript.Shell").RegWrite "HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR\Start", 4, "REG_DWORD" 

我如何得到它的工作(因为我的脚本似乎没有必要的权限):

 ShellExecute 0, "runas", "C:\Windows\System32\cmd.exe", "/k %windir%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR /f /v Start /t REG_DWORD /d 4", "C:\", 0 

在这最后一个例子中,用户将被提示提供必要的权限。

PS:HKLM是HKEY_LOCAL_MACHINE的缩写。 所有其他的根键名称都有类似的缩写,可以在顶部提到的页面中查阅。

作为一个实际的例子,我会张贴我的使用这些expression式来启用/禁用USB海量存储(当禁用,当closures启用):

 Sub DoUSB_Control() If CreateObject("WScript.Shell").RegRead("HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR\Start") = 3 Then ShellExecute 0, "runas", "C:\Windows\System32\cmd.exe", "/k %windir%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR /f /v Start /t REG_DWORD /d 4", "C:\", 0 Else ShellExecute 0, "runas", "C:\Windows\System32\cmd.exe", "/k %windir%\System32\reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR /f /v Start /t REG_DWORD /d 3", "C:\", 0 End If End Sub