Return to Snippet

Revision: 6692
at June 7, 2008 17:42 by narkisr


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

public class JavaRegistryHack {

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

  public static void main(String args[]) {
      final Preferences userRoot = Preferences.userRoot();
      final Preferences systemRoot = Preferences.systemRoot();
      final Class clz = userRoot.getClass();
      try {
          final Method openKey = clz.getDeclaredMethod("openKey",
                  byte[].class, int.class, int.class);
          openKey.setAccessible(true);

          final Method closeKey = clz.getDeclaredMethod("closeKey",
                  int.class);
          closeKey.setAccessible(true);

          final Method winRegQueryValue = clz.getDeclaredMethod(
                  "WindowsRegQueryValueEx", int.class, byte[].class);
          winRegQueryValue.setAccessible(true);
          final Method winRegEnumValue = clz.getDeclaredMethod(
                  "WindowsRegEnumValue1", int.class, int.class, int.class);
          winRegEnumValue.setAccessible(true);
          final Method winRegQueryInfo = clz.getDeclaredMethod(
                  "WindowsRegQueryInfoKey1", int.class);
          winRegQueryInfo.setAccessible(true);


          byte[] valb = null;
          String vals = null;
          String key = null;
          Integer handle = -1;

          //Query Internet Settings for Proxy
          key = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
          handle = (Integer) openKey.invoke(userRoot, toCstr(key), KEY_READ, KEY_READ);
          valb = (byte[]) winRegQueryValue.invoke(userRoot, handle.intValue(),
                  toCstr("ProxyServer"));
          vals = (valb != null ? new String(valb).trim() : null);
          System.out.println("Proxy Server = " + vals);
          closeKey.invoke(Preferences.userRoot(), handle);

          // Query for IE version
          key = "SOFTWARE\\Microsoft\\Internet Explorer";
          handle = (Integer) openKey.invoke(systemRoot, toCstr(key), KEY_READ, KEY_READ);
          valb = (byte[]) winRegQueryValue.invoke(systemRoot, handle, toCstr("Version"));
          vals = (valb != null ? new String(valb).trim() : null);
          System.out.println("Internet Explorer Version = " + vals);
          closeKey.invoke(Preferences.systemRoot(), handle);

      } catch (Exception e) {
          e.printStackTrace();
      }
  }

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

Initial URL


Initial Description
A paste from a blog (http://lenkite.blogspot.com/2008/05/access-windows-registry-using-java.html) entry which demonstrates how to access windows registry in Java.

Initial Title
Accessing windows registry in Java

Initial Tags
java, windows

Initial Language
Java