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注册项的默认值。
Preferences pfs = Preferences.systemRoot().node("/test");
这句是干吗的啊,是不是需要找的东东必须放到这个目录下,也就是我该把ic.ocx这个文件放到test目录下
你的jdk是什么版本的?
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注册表的其它地方是操作不到的.
我也纳闷怎么可能随便更改注册表...pigo的回答解开了我的疑团。呵呵
我想实现的功能是判断ic.ocx这个控件是否已经在注册表里进行过注册,不需要修改注册表因为在web页面运行的时候用到了这个控件,而希望运行的时候可以自动注册,但是每次都注册很麻烦,所以想判断控件是否注册,如果未注册,就执行注册程序。
1.5以后就不知道了
(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注册项的默认值。
HKEY_LOCAL_MACHINE\SYSTEM 这样吗?
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机子上在其它位置吧。它在注册表里的具体位置我不知道,你应该是知道的。