使用Java添加系统右键菜单

原文地址:http://blog.csdn.net/brilliancezhou/article/details/5425754

注:ICE_JNIRegistry.dll 和registry.jar这两个文件可在我的资源中下载

 

    如果你在系统中需要经常使用DOS进入某个文件夹,一般的做法就是打开”运行”,在命令文本框中输入cmd,然后再在出现的

DOS界面中输入要达到的文件夹的路径。有没有更好的办法呢?比如说右击一个文件夹,将出现一个菜单项为“命令提示符”,单击

此菜单项则会直接进入DOS,而且DOS提示的当前路径也就是文件夹的路径。 要达到这个目的,修改注册表即可。当然我们这里讨论

的是如何使用JAVA 来做到这点。其实就是使用JAVA来操作注册表。
使用JAVA操作注册表的方法有几种,最简单的方法就是使用JAVA本身提供的API 来操作,即java.util.prefs,使用其中的类

Preferences,但是如果使用自带的API则只能在 Win32 下用来操作 HKCU/Software/JavaSoft 和 HKLM/Software/JavaSoft 下及子节

点的数据。如果需要达到添加右键菜单的功能,必须修改HKEY_CLASSES_ROOT子键内容。也就是说JAVA自带的API做不到自由访问注册

表的键值。不过JAVA提供了一个很好的方式称为JNI,实际上就是通过C或C++提供的方法操作注册表,它们所写的程序可生成DLL文件

,然后在JAVA中调用DLL。这里关于如何使用C或C++就不多说了,网上也有成堆的文章,想了解的可以去看看。在这里我使用一个开

源的项目gdapi。以下把使用的详细步骤介绍一下
第一步、把论坛上的registry-3.1.3.zip下载到本机
第二步、将registry-3.1.3.zip解压,解压之后会产生目录bin, classes, doc, source。这里只需要bin目录,打开bin目录,在其

中会有两个文件ICE_JNIRegistry.dll 和registry.jar
第三步、新建一个工程,你可以采用任意开发工具,这里采用MyEclipse。打开MyEclipse新建一个Java Project, 然后将

registry.jar包添加到工程中来,并且将ICE_JNIRegistry.dll文件复制到工程的根目录下。
第四步、编写Java代码调用dll. 实现右击文件夹时将”命令提示符”添加到右键菜单下。 
        首先要确定需要修改的注册表项为HKEY_CLASSES_ROOT//Directory//shell


具体Java代码如下:

[java]  view plain copy
  1. package com;  
  2. /** 
  3. *Java 操作注册表,为文件夹添加右键菜单cmd 
  4. *author: zhouh  
  5. */  
  6. import java.io.UnsupportedEncodingException;  
  7. import com.ice.jni.registry.NoSuchKeyException;  
  8. import com.ice.jni.registry.RegStringValue;  
  9. import com.ice.jni.registry.Registry;  
  10. import com.ice.jni.registry.RegistryException;  
  11. import com.ice.jni.registry.RegistryKey;  
  12. public class RegisterManager{        
  13.         /*定义目录字符串*/  
  14.         private static String dir = "Directory//shell";  
  15.         /*注册表键对象*/  
  16.         private static RegistryKey rkey;  
  17.           
  18.         /*为dir添加set和get方法*/  
  19.         public String getDir() {  
  20.                 return dir;  
  21.         }          
  22.         public void setDir(String dir) {  
  23.                 this.dir = dir;  
  24.         }  
  25.           
  26.         /*构造函数,打开HKEY_CLASSES_ROOT中的dir*/  
  27.         private RegisterManager() {  
  28.                 rkey = Registry.openSubkey(Registry.HKEY_CLASSES_ROOT,      
  29.                 dir ,      
  30.                 RegistryKey.ACCESS_WRITE);  
  31.         }  
  32.           
  33.         /*创建子目录方法*/  
  34.         public void createSubDir(String subDirName,String key, String defaultValue) throws RegistryException {  
  35.                   
  36.                 /*根据传入的参数创建子目录*/  
  37.                 rkey.createSubKey(subDirName, "");  
  38.                 /*打开当前创建的子目录,设置为可写状态*/  
  39.                 rkey = Registry.openSubkey(Registry.HKEY_CLASSES_ROOT,      
  40.                 dir+"//"+subDirName,      
  41.                 RegistryKey.ACCESS_WRITE);  
  42.                 /*设置当前子目录的默认注册表项的值*/  
  43.                 rkey.setValue(new RegStringValue(rkey, key, defaultValue));  
  44.                 /*重新设置当前目录,为方便此目录下再添加子目录*/  
  45.                 this.setDir(dir+"//"+subDirName);  
  46.         }  
  47.     public static void main(String[] args) throws NoSuchKeyException, RegistryException,   
  48. UnsupportedEncodingException{    
  49.             /*创建对象*/  
  50.             RegisterManager rm = new RegisterManager();  
  51.             /*创建子项CommandPrompt,默认的value值为cmd, 那么在文件夹的右键菜单下即会显示cmd*/  
  52.             rm.createSubDir("CommandPrompt""""cmd");  
  53.               
  54.             /*在CommandPrompt项下创建子项Command,值为(cmd.exe /k cd /"%1/") 也就是单击cmd所要执行的操作*/  
  55.             rm.createSubDir("Command""""cmd.exe /k cd /"%1/"");  
  56. }  

复制代码运行结束后,找到任意一个文件夹,右击此文件夹将会出现cmd菜单项,选择此项将会进入dos,当前目录为此文件夹的目录


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值