我找到了这个问题的第一个回复: 使用 Java 读取/写入 Windows 注册表
我已经从回复中复制了类并使用了它。
此示例代码有效:
String value = WinRegistry.readString (
WinRegistry.HKEY_LOCAL_MACHINE, //HKEY
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", //Key
"ProductName"); //ValueName
System.out.println("Windows Distribution = " + value);
但是,当我尝试跑步时:
String value = WinRegistry.readString(
WinRegistry.HKEY_LOCAL_MACHINE, //HKEY
"SYSTEM\\CurrentControlSet\\Services\\LanmanWorkstation\\Parameters", //Key
"EnableSecuritySignature"); //ValueName
System.out.println(value);
我得到空值。
我必须读取 EnableSecuritySignature 的日期值。
有人知道可能是什么问题吗? 抱歉,我的描述中缺乏细节,我很着急))
我找到了解决方案:
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
public class ReadRegistry
{
public static final String readRegistry(String location, String key){
try {
// Run reg query, then read output with StreamReader (internal class)
Process process = Runtime.getRuntime().exec("reg query " +
'"'+ location + "\" /v " + key);
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
// Parse out the value
// String[] parsed = reader.getResult().split("\\s+");
String s1[];
try{
s1=reader.getResult().split("REG_SZ|REG_DWORD");
}
catch(Exception e)
{
return " ";
}
//MK System.out.println(s1[1].trim());
return s1[1].trim();
} catch (Exception e) {
}
return null;
}
static class StreamReader extends Thread {
private InputStream is;
private StringWriter sw= new StringWriter();
public StreamReader(InputStream is) {
this.is = is;
}
public void run() {
try {
int c;
while ((c = is.read()) != -1)
//System.out.println(c);
sw.write(c);
} catch (IOException e) {
}
}
public String getResult() {
return sw.toString();
}
}
}
你必须像这样使用它:
Registry2.readRegistry("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\LanmanWorkstation\\Parameters", "EnableSecuritySignature");
课程取自这里。
工作完美。干得好,拉杜·阿拉玛!谢谢!