使用Java添加系统右键菜单

注: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

package com;
/**
*Java 操作注册表,为文件夹添加右键菜单cmd
*author: zhouh 
*/
import java.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 RegisterManager{      
        /*定义目录字符串*/
        private static String dir = "Directory//shell";
        /*注册表键对象*/
        private static RegistryKey rkey;
        
        /*为dir添加set和get方法*/
        public String getDir() {
                return dir;
        }        
        public void setDir(String dir) {
                this.dir = dir;
        }
        
        /*构造函数,打开HKEY_CLASSES_ROOT中的dir*/
        private RegisterManager() {
                rkey = Registry.openSubkey(Registry.HKEY_CLASSES_ROOT,    
                dir ,    
                RegistryKey.ACCESS_WRITE);
        }
        
        /*创建子目录方法*/
        public void createSubDir(String subDirName,String key, String defaultValue) throws RegistryException {
                
                /*根据传入的参数创建子目录*/
                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{  
            /*创建对象*/
            RegisterManager rm = new RegisterManager();
            /*创建子项CommandPrompt,默认的value值为cmd, 那么在文件夹的右键菜单下即会显示cmd*/
            rm.createSubDir("CommandPrompt", "", "cmd");
            
            /*在CommandPrompt项下创建子项Command,值为(cmd.exe /k cd /"%1/") 也就是单击cmd所要执行的操作*/
            rm.createSubDir("Command", "", "cmd.exe /k cd /"%1/"");
}

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

转载于:https://my.oschina.net/lldy/blog/57081

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值