gpt4 book ai didi

registry - 从 Windows 注册表读取 DWord

转载 作者:行者123 更新时间:2023-12-02 20:16:58 26 4
gpt4 key购买 nike

如何使用 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/

您还可以使用 jRegistryKey.jar 和 dll(我想摆脱它)或其他 native 接口(interface),如 http://www.trustice.com/java/jnireg/ (我没有尝试过)

关于registry - 从 Windows 注册表读取 DWord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5133309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com