如何在Windows注册表中查找文件夹中的所有文件夹

如何在Windows注册表中查找文件夹中的所有文件夹,windows,java-native-interface,registry,Windows,Java Native Interface,Registry,关于如何读/写windows,已经有很多问题,并且有很多好的jni/非jni解决方案可用。我经历了一些,但它们都没有提供遍历注册表的方法 通过遍历,我的意思是我想知道Windows注册表中某个特定文件夹的所有子文件夹,然后是该文件夹中的所有键 可用的解决方案,让我们阅读注册表项,而不是注册表文件夹来查找其中的子文件夹。利用Windows API进行注册表访问,并通过JNI公开它 Windows注册表API: 键函数为RegEnumKeyEx 下面是一个关于在c++中遍历注册表项的教程:我需要一些

关于如何读/写windows,已经有很多问题,并且有很多好的jni/非jni解决方案可用。我经历了一些,但它们都没有提供遍历注册表的方法

通过遍历,我的意思是我想知道Windows注册表中某个特定文件夹的所有子文件夹,然后是该文件夹中的所有键


可用的解决方案,让我们阅读注册表项,而不是注册表文件夹来查找其中的子文件夹。

利用Windows API进行注册表访问,并通过JNI公开它

Windows注册表API:
键函数为RegEnumKeyEx


下面是一个关于在c++中遍历注册表项的教程:

我需要一些java解决方案,但后来发现一些VBScrip可以很容易地做到这一点

Const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\MICROSOFT\Windows\CurrentVersion\MMDevices\Audio\Capture"

Sub EnumerateKeys(hive, key)
  'WScript.Echo key
  reg.EnumKey hive, key, arrSubKeys
  If Not IsNull(arrSubKeys) Then
    For Each subkey In arrSubKeys
      EnumerateKeys hive, key & "\" & subkey
    Next
  End If
  reg.GetDWORDValue hive,key,"DeviceState",nn
  'WScript.Echo key & " = " & nn
    If nn=268435457 Then
        'WScript.Echo "Good morning!"
        reg.SetDWORDValue hive,key,"DeviceState",1
    ElseIf  nn=1 Then
        reg.SetDWORDValue hive,key,"DeviceState",268435457
    Else
        'WScript.Echo "Have a nice day!"
    End If
End Sub

Set reg = GetObject("winmgmts://./root/default:StdRegProv")

EnumerateKeys HKEY_LOCAL_MACHINE, strKeyPath
上面的脚本不仅对键和子键进行迭代,还读取、比较并设置DWORD值


术语说明:您所称的文件夹实际上称为密钥。键内部可以是其他键(子键)以及值。值包含名称和数据。感谢您的回复。我最终使用了VBScript,看起来很好,很简单,很小。