关于如何读取/写入窗口以及它们可用的良好jni / non-jni解决方案的数量已经有很多问题。我经历了一些,但他们都没有提供遍历注册表的方法。
通过遍历,我的意思是说我想知道Windows注册表中特定文件夹的所有子文件夹,然后知道该文件夹中的所有密钥。
可用的解决方案,让我们读取注册表项,但不读取注册表文件夹以查找其中的子文件夹。
答案 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值。