????????????

??????java??windows??????б?????????????????????java??????????????java????Runtime?????????????command?????????????OS??????????????????????????????Ч??????

??????????????????????????????????????????????key?????value??type???????????????С?

????//????????

????add(String location?? String key?? String type?? String value);
????delete(String location?? String key);
????query(String location?? String key);

????//??????????????

????getKey() => ??????key??.
????getValue() => ????key?????value
????getType() => ????key????????????? (REG_SZ?? REG_BINARY?? ??)

???????÷???

????????


public static void main(String[] args) {
        try {
            RegKeyManager rkm = new RegKeyManager();
//            64λ??????????
//            rkm.query("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent\QQ2009"?? "Install");
//            32λ??????????
            rkm.query("HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQ2009"?? "Install");
            System.out.println("KEY: " + rkm.getKey() + " DATA TYPE: " + rkm.getType() + " DATA VALUE: " + rkm.getValue());
//            rkm.add("HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQ2009"??"TESTING"??"REG_SZ"??"VALUE DATA");
//            rkm.delete("HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQ2009"??"TESTING");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


???????64λ??????·???????????????????????qq??????·???2????qq????·??????????QQ????·????????д????????????£?????????????????ο?JAVA????????????????·??????????·??????????????????????????????????


package info.itlanguageexpress.java;
import java.io.*;
public class RegKeyManager {
    private final String TYPES[] = { "SZ"?? "BINARY"?? "DWORD"?? "QWORD"?? "DWORD_LITTLE_ENDIAN"?? "QWORD_LITTLE_ENDIAN"?? "DWORD_BIG_ENDIAN"?? "EXPAND_SZ"?? "LINK"?? "MULTI_SZ"?? "NONE"?? "RESOURCE_LIST" };
    private String type = ""?? value = ""?? key = "";
    protected void query(String loc?? String k) throws Exception {
        Process p = Runtime.getRuntime().exec("reg QUERY "" + loc + "" /v "" + k + """);
        BufferedReader in = new BufferedReader( new InputStreamReader( p.getInputStream() ) );
        String out = "";
        while ( ( out = in.readLine() ) != null ) {
            if (out.matches("(.*)\s+REG_(.*)")) { break; }
        }
        in.close();
        String str[] = out.split("    ");
        int b = 0;
        for (int a=0; a < str.length; a++) {
            if ( str[a].replace(" "?? "").matches("\S+") ) {
                switch (b) {
                    case 0: key = str[a]; break;
                    case 1: type = str[a]; break;
                    case 2: value = str[a]; break;
                }
                b++;
            }
        }
    }
    protected String getKey() { return key; }
    protected String getType() { return type; }
    protected String getValue() { return value; }
    protected boolean add(String loc?? String name?? String dType?? String value) throws Exception {
        boolean comp = false?? valid = false;
        for (int a = 0; a < TYPES.length; a++) {
            if (dType.equalsIgnoreCase("REG_" + TYPES[a])) { valid = true; break; }
        }
        if ( valid ) {
            Process p = Runtime.getRuntime().exec("reg ADD "" + loc + "" /v "" + name + "" /t "" + dType + "" /d "" + value + """);
            BufferedReader in = new BufferedReader( new InputStreamReader( p.getInputStream() ) );
            String out = "";
            while ( (out = in.readLine() ) != null ) {
                if (out.equalsIgnoreCase("The operation completed successfully.")) { comp = true; }
            }
            in.close();
        }
        return comp;
    }
    protected boolean delete(String loc?? String key) throws Exception {
        boolean comp = false;
        Process p = Runtime.getRuntime().exec("reg DELETE "" + loc + "" /v "" + key + "" /f");
        BufferedReader in = new BufferedReader( new InputStreamReader( p.getInputStream() ) );
        String out = "";
        while ( ( out = in.readLine() ) != null ) {
            if (out.equalsIgnoreCase("The operation completed successfully.")) { comp = true; }
        }
        in.close();
        return comp;
    }
}