首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取和写入VBA中的注册表

读取和写入VBA中的注册表
EN

Stack Overflow用户
提问于 2015-09-02 05:28:45
回答 3查看 23.3K关注 0票数 9

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

代码语言:javascript
复制
Microsoft.Win32.Registry.SetValue(@"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR", "Start", 4,Microsoft.Win32.RegistryValueKind.DWord);

我在这里完全迷失了方向,有一些错误:

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

当我使用默认的i_Type字符串"REG_SZ“而不是"Start”时,我会得到一个与regkey相关的错误:

运行时- -214702489180070005无效根目录

我的代码:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-09-03 07:47:55

我认为这里的问题是宏没有写入注册表的权限。

此页中有更多信息。我可以很好地使用WScript对象读取键的值:

代码语言:javascript
复制
Debug.Print CreateObject("WScript.Shell").RegRead("HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR\Start")

要编写(如果您有权限,它应该工作):

代码语言:javascript
复制
CreateObject("WScript.Shell").RegWrite "HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR\Start", 4, "REG_DWORD"

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

代码语言:javascript
复制
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的缩写。所有其他根键名称都有类似的缩写,可以在上面提到的一页中查阅。

作为一个实际示例,我将使用这些表达式来启用/禁用USB大容量存储(当禁用时,关闭启用时):

代码语言:javascript
复制
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
票数 12
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32345238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档