如何使用 java.util.prefs.Preferences 从 Windows 注册表读取 DWORD 值数据。
我可以读取REG_SZ类型的数据,但是读取REG_DWORD类型时,返回null。
Preferences userRoot = Preferences.userRoot();
Class clz = userRoot.getClass();
openKey = clz.getDeclaredMethod("openKey", byte[].class, int.class, int.class);
openKey.setAccessible(true);
final Method closeKey = clz.getDeclaredMethod("closeKey", int.class);
closeKey.setAccessible(true);
byte[] valb = null;
String key = null;
Integer handle = -1;
final Method winRegQueryValue = clz.getDeclaredMethod("WindowsRegQueryValueEx", int.class, byte[].class);
winRegQueryValue.setAccessible(true);
key = "Software\\SimonTatham\\PuTTY\\Sessions\\myMachine";
handle = (Integer) openKey.invoke(userRoot, toCstr(key), KEY_READ, KEY_READ);
//this line returns byte[] correctly
valb = (byte[]) winRegQueryValue.invoke(userRoot, handle.intValue(), toCstr("HostName"));
//but this line returns null instead of byte[] even though there is a value of type REG_DWORD
valb = (byte[]) winRegQueryValue.invoke(userRoot, handle.intValue(), toCstr("PortNumber"));
closeKey.invoke(Preferences.userRoot(), handle);
任何想法?
我也有同样的问题。
看来您无法使用 Java-Preferences 方法读取双字。 (你只能读取字符串,我认为这不会改变)
我发现一个项目通过调用 Runtime.exec() 来处理这个问题,而 regedit.exe 女巫非常肮脏,但可能会帮助其他有同样问题的人。
该项目使用与字符串相同的方法。http://sourceforge.net/projects/java-registry/ http://sourceforge.net/projects/java-registry/
您还可以使用 jRegistryKey.jar 和 dll (我想摆脱它)
或其他本机接口,例如http://www.trustice.com/java/jnireg/ http://www.trustice.com/java/jnireg/(我没有尝试过)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)