参考这篇文章:http://blog.csdn.net/brilliancezhou/article/details/5425754,发现无法调试成功。经过4小时的攻关,终于成功,分享給各位。
效果如下:
1.首先,调试过程中始终会在下面代码处出现问题:
- rkey.createSubKey(subDirName, "");
会出现空指针异常啊!经过更改参数,始终无法得到正确结果。
2.无意间从网上找的这篇文章,强烈建议仔细阅读并实践一下这篇文章(http://lavasoft.blog.51cto.com/62575/19241/);
这对我们理解Windows和Java下的注册表设置方法 有深刻帮助:
3.通过上面文章,发现了http://blog.csdn.net/brilliancezhou/article/details/5425754中的2处BUG:
1)第14行 有错误:/*定义目录字符串*/ private static String dir = "Directory//shell";
2)所有的 // 都应该改成 \\ ;
于是,更改过BUG的代码如下:
package rightkey;
importjava.io.UnsupportedEncodingException;
import com.ice.jni.registry.NoSuchKeyException;
import com.ice.jni.registry.RegStringValue;
import com.ice.jni.registry.Registry;
import com.ice.jni.registry.RegistryException;
import com.ice.jni.registry.RegistryKey;
public class rightkey{
/*定义目录字符串*/
private static Stringdir = "Folder\\shell";
/*注册表键对象*/
private staticRegistryKey rkey;
public StringgetDir() {
return dir;
}
public voidsetDir(String dir) {
this.dir = dir;
}
/*构造函数,打开HKEY_CLASSES_ROOT中的dir*/
private rightkey() {
rkey =Registry.openSubkey(Registry.HKEY_CLASSES_ROOT,dir,RegistryKey.ACCESS_WRITE);
}
/*创建子目录方法*/
public voidcreateSubDir(String subDirName,String key, String defaultValue) throwsRegistryException {
/*根据传入的参数创建子目录*/
rkey.createSubKey(subDirName,"");
/*打开当前创建的子目录,设置为可写状态*/
rkey = Registry.openSubkey(Registry.HKEY_CLASSES_ROOT,dir+"\\"+subDirName,RegistryKey.ACCESS_WRITE);
/*设置当前子目录的默认注册表项的值*/
rkey.setValue(new RegStringValue(rkey, key, defaultValue));
/*重新设置当前目录,为方便此目录下再添加子目录*/
this.setDir(dir+"\\"+subDirName);
}
public static void main(String[]args) throws NoSuchKeyException, RegistryException,
UnsupportedEncodingException{
/*创建对象*/
rightkey rm = new rightkey();
/*创建子项CommandPrompt,默认的value值为cmd,那么在文件夹的右键菜单下即会显示cmd*/
rm.createSubDir("CommandPrompt", "","Test_DOS");
/*在CommandPrompt项下创建子项Command,值为(cmd.exe/k cd /"%1/") 也就是单击cmd所要执行的操作*/
rm.createSubDir("Command", "","cmd.exe /K CD %1 ");
}
}
另外说明几点:
1.软件《Registry Workshop 2.31 简体中文版》用着非常方便;建议下载保留,调试用;
2.在注册表中删除错误/多余的设置,可以用软件《Registry Workshop 2.31 简体中文版》选中待删除项后按Delete键,再按F5即可;
3.Thanks to"http://lavasoft.blog.51cto.com/62575/19241/"的教程和软件;