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

时间:2014-01-24 15:23:24

标签: windows java-native-interface registry

关于如何读取/写入窗口以及它们可用的良好jni / non-jni解决方案的数量已经有很多问题。我经历了一些,但他们都没有提供遍历注册表的方法。

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

可用的解决方案,让我们读取注册表项,但不读取注册表文件夹以查找其中的子文件夹。

2 个答案:

答案 0 :(得分:1)

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

Windows注册表API:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724875(v=vs.85).aspx
   关键功能为RegEnumKeyEx

这是一个关于在c ++中遍历注册表项的教程:http://www.codeguru.com/cpp/w-p/ce/registry/article.php/c8301/Walking-The-Registry-Tree.htm

答案 1 :(得分:0)

我在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值。

Quick Reference