读写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