你也没set value阿再说这个类只能读特定位置的内容,不是随便读的

解决方案 »

  1.   

    你在注册表里找到的是否在目录Preferences.userRoot().node("/test")下啊?
      

  2.   

    Preferences pf = Preferences.userRoot().node("/test");
        Preferences pfs = Preferences.systemRoot().node("/test");
    这句是干吗的啊,是不是需要找的东东必须放到这个目录下,也就是我该把ic.ocx这个文件放到test目录下
      

  3.   

    把相关文件放到test目录下也还是一样的结果啊,还是Unknown
      

  4.   

    注册表里执行搜索?
    你的jdk是什么版本的?
    java 是平台无关的呀?!!!!
    ?????
      

  5.   

    java所操纵的注册表信息都在:
    java.util.prefs.Preferences.systemRoot()对应的是:[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs]java.util.prefs.Preferences.userRoot()对应的是:[HKEY_CURRENT_USER\Software\JavaSoft\Prefs]
    Preferences.systemRoot().node("/test")对应的是:[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs\test]
    windows注册表的其它地方是操作不到的.
      

  6.   

    学习,
    我也纳闷怎么可能随便更改注册表...pigo的回答解开了我的疑团。呵呵
      

  7.   

    我想最好的方法就是用jni技术借助winapi解决,不然就要对reg文件格式很熟悉,通过导出注册表文件,修改后再导入........
      

  8.   

    我想实现的功能仅仅是判断ic.ocx这个控件是否已经在注册表里进行过注册,不需要修改注册表
      

  9.   

    老大们,能不能帮我想想办法啊,急。
    我想实现的功能是判断ic.ocx这个控件是否已经在注册表里进行过注册,不需要修改注册表因为在web页面运行的时候用到了这个控件,而希望运行的时候可以自动注册,但是每次都注册很麻烦,所以想判断控件是否注册,如果未注册,就执行注册程序。
      

  10.   

    只能同过JNI,JAVA本身对注册表没有支持!起码在JDK1。4。1一前没有支持
    1.5以后就不知道了
      

  11.   

    ic.ocx这个控件在注册表里的注册位置是固定的吗?如果是,并且你的java类有写文件的授权。那么我想可以用WScript可以实现:
    (1)用java类在临时文件夹下建立一个WScript脚本文件,WScript文件内容:
    Set WshShell = WScript.CreateObject("WScript.Shell") 'Wscript对象
    bKey = WshShell.RegRead("ic.ocx这个控件在注册表里的注册位置") '在注册表里查找ic.ocx
    if TypeName(bKey)<> "Variant()" Then    '要读取项的默认值不是注册项
    WScript.StdOut.Write(bKey)
    end if
    (2)用Runtime执行
    Runtime rt = Runtime.getRuntime();Process p = rt.exec("cmd /C CScript WScript脚本文件path");
    BufferedInputStream da = new BufferedInputStream(p.getInputStream());
    int intR = -1;
    int i=1;
    StringBuffer sb = new StringBuffer();
    while((intR=da.read()) >-1){
    if (i > 118) sb.append((char)intR); // 前118是Cscript的标题信息
    i++;
    }
    如果sb有值,就是ic.ocx注册项的默认值。
      

  12.   

    什么是wscript啊,怎么用java类建立脚本文件,我没看懂啊,还有WshShell.RegRead("ic.ocx这个控件在注册表里的注册位置") ,怎么表示出ic.ocx在注册表得位置呢?
    HKEY_LOCAL_MACHINE\SYSTEM 这样吗?
      

  13.   

    wscript就是Windows 脚本宿主,它可以用Jscript或VBScript来写。你到微软的中国网站http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=376D98B6-67CF-4473-9B7D-F635292A286F 下载scd56chs.exe文件用Winrar解压,里边有.chm的帮助文件,在Windows 脚本宿主-〉参考-〉方法下你能找到:RegDelete 方法;RegRead 方法;RegWrite 方法。他们是对注册表操作的方法。
    wscript文件就是一个后缀为:.vbs(VBScript)或.JS(JScript)或.wsf的文件。用java创建时和其它文件是一样的,这是一个例子:它在java.io的临时目录下创建regWsf.vbs。生成后,可以在DOS下测一下,命令:Csript regWsf.vbs  如力参数regStr是注册表的项名(如:"HKCU\Software\ACME\" 必须以“\"结尾)或值名(如:"HKCU\Software\ACME\FortuneTeller" 不能以“\"结尾)
    private String setWinWsfForRead(String regStr){
    BufferedWriter out =null;
    String tmpPath = System.getProperty("java.io.tmpdir") + "regWsf.vbs";
    try{
    out = new BufferedWriter(new FileWriter(tmpPath));
    out.write("Dim WshShell, bKey, vbItemStr");
    out.newLine();
    out.write("Set WshShell = WScript.CreateObject(\"WScript.Shell\")");
    out.newLine();
    out.write("bKey = WshShell.RegRead(\"" + regStr + "\")");
    out.newLine();
    out.write("WScript.StdOut.Write(\"<Win_WScript_Start>\")");
    out.newLine();
    out.write("If TypeName(bKey)=\"Variant()\" Then");
    out.newLine();
    out.write("WScript.StdOut.Write(\"<Variant_Type_Item_Value>\")");
    out.newLine();
    out.write("    vbItemStr=\"\"");
    out.newLine();
    out.write("    For i=0 To Ubound(bKey)");
    out.newLine();
    out.write("       If i=0 Then");
    out.newLine();
    out.write("         vbItemStr= Cstr(bKey(i))");
    out.newLine();
    out.write("       Else");
    out.newLine();
    out.write("         vbItemStr= vbItemStr + \"&&&&&&&&\" + Cstr(bKey(i))");
    out.newLine();
    out.write("       End If");
    out.newLine();
    out.write("    Next");
    out.newLine();
    out.write("WScript.StdOut.Write(vbItemStr)");
    out.newLine();
    out.write("ElseIf TypeName(bKey)=\"Integer\" Then");
    out.newLine();
    out.write("WScript.StdOut.Write(\"<Integer_Type_Item_Value>\")");
    out.newLine();
    out.write("WScript.StdOut.Write(Cstr(bKey))");
    out.newLine();
    out.write("ElseIf TypeName(bKey)=\"String\" Then");
    out.newLine();
    out.write("WScript.StdOut.Write(\"<String_Type_Item_Value>\")");
    out.newLine();
    out.write("WScript.StdOut.Write(bKey)");
    out.newLine();
    out.write("Else");
    out.newLine();
    out.write("WScript.StdOut.Write(\"<Unknown_Type_Item_Value>\")");
    out.newLine();
    out.write("WScript.StdOut.Write(Cstr(bKey))");
    out.newLine();
    out.write("End if");
    out.newLine();
    out.write("WScript.StdOut.Write(\"<Win_WScript_End>\")");
    }catch(Exception e){
    e.printStackTrace();
    }finally{
    try{
    if (out!=null){
    out.close();
    }
    }catch(Exception e){
    }
    }
    return tmpPath;
    }
    (2)ic.ocx这个控件在注册表里的注册位置是固定吧,不会在A机子上在“HKEY_CURRENT_USER\Software\ic.oxc",而在B机子上在其它位置吧。它在注册表里的具体位置我不知道,你应该是知道的。