Java - accessing Windows Registry

S

stanberka

Hi,

The following code found on another page (lenkite's WebLog) is working
fine under new (1.5.0) and old (1.1.8) java. Precisely, it returns the
current Novel login from the registry. Change to suit:

import java.lang.reflect.Method;
import java.util.prefs.Preferences;

public static String getUserNovelLogin() {

final int HKEY_CURRENT_USER = 0x80000001;
final int KEY_QUERY_VALUE = 1;
final int KEY_SET_VALUE = 2;
final int KEY_READ = 0x20019;

String value = null;

final Preferences userRoot = Preferences.userRoot();
final Class clz = userRoot.getClass();
try {
Class[] parms1 = {byte[].class, int.class, int.class};
final Method mOpenKey = clz.getDeclaredMethod("openKey",
parms1);
mOpenKey.setAccessible(true);

Class[] parms2 = {int.class};
final Method mCloseKey = clz.getDeclaredMethod("closeKey",
parms2);
mCloseKey.setAccessible(true);

Class[] parms3 = {int.class, byte[].class};
final Method mWinRegQueryValue = clz.getDeclaredMethod(
"WindowsRegQueryValueEx", parms3);
mWinRegQueryValue.setAccessible(true);

Class[] parms4 = {int.class, int.class, int.class};
final Method mWinRegEnumValue = clz.getDeclaredMethod(
"WindowsRegEnumValue1", parms4);
mWinRegEnumValue.setAccessible(true);

Class[] parms5 = {int.class};
final Method mWinRegQueryInfo = clz.getDeclaredMethod(
"WindowsRegQueryInfoKey1", parms5);
mWinRegQueryInfo.setAccessible(true);

// Should be: HKEY_CURRENT_USER\Volatile Environment, key
NWUSERNAME
final String subKey = "Volatile Environment";

Object[] objects1 = {toByteArray(subKey), new
Integer(KEY_READ), new Integer(KEY_READ)};
Integer hSettings = (Integer) mOpenKey.invoke(userRoot,
objects1);

Object[] objects2 = {hSettings, toByteArray("NWUSERNAME")};
byte[] b = (byte[]) mWinRegQueryValue.invoke(userRoot,
objects2);
value = (b != null ? new String(b).trim() : null);
System.out.println(value);

Object[] objects3 = {hSettings};
mCloseKey.invoke(Preferences.userRoot(), objects3);

} catch (Exception e) {
System.out.println("Error getting user's Novel login from
Windows registry: ");
e.printStackTrace();
}
return value;
} // getUserNovelLogin()


private static byte[] toByteArray(String str) {
byte[] result = new byte[str.length() + 1];
for (int i = 0; i < str.length(); i++) {
result = (byte) str.charAt(i);
}
result[str.length()] = 0;
return result;
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,898
Latest member
BlairH7607

Latest Threads

Top