`

java利用jni操作注册表

阅读更多

java自带有一个prefs包,可以简单地在固定的节点中写入些信息,但感觉太受局限,而且在注册表中一眼就能找出来,因此找到了各利用jni插件来操作注册表的方法,应用灵活,与大家分享我的代码:

/**//*
 * WriteRegedit.java
 *
 * Created on 2008年3月5日, 下午6:16
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package RegeditInfo;

import com.ice.jni.registry.*;
import java.text.SimpleDateFormat;
import java.util.TimerTask;

/** *//**
 *
 * @author heavens
 */
public class RegeditBase ...{
    
    static SimpleDateFormat shortDateFormat  = new SimpleDateFormat("yyyy-MM-dd");
    /** *//** Creates a new instance of test */
   
   //把信息存储到注册表HKEY_LOCAL_MACHINE下的某个节点的某一变量中,有则修改,无则创建
    public static boolean setValue(String folder,String subKeyNode,String subKeyName,String subKeyValue)
    ...{
        try 
        ...{     
            RegistryKey software = Registry.HKEY_LOCAL_MACHINE.openSubKey(folder);
            RegistryKey subKey = software.createSubKey(subKeyNode, "");      
            subKey.setValue(new RegStringValue(subKey,subKeyName,subKeyValue));
            subKey.closeKey();  
            return true;
        } 
        catch(NoSuchKeyException e) 
        ...{      
            e.printStackTrace();    
        } 
        catch(NoSuchValueException e)
        ...{
            e.printStackTrace();   
        }
        catch(RegistryException e) 
        ...{      
            e.printStackTrace();    
        }  
       return false;
    }
    
    //删除注册表中某节点下的某个变量
    public static boolean deleteValue(String folder,String subKeyNode,String subKeyName)
    ...{
        try 
        ...{      
            RegistryKey software = Registry.HKEY_LOCAL_MACHINE.openSubKey(folder);
            RegistryKey subKey = software.createSubKey(subKeyNode, "");    
            subKey.deleteValue(subKeyName);
            subKey.closeKey();   
            return true;
        } 
        catch (NoSuchKeyException e) 
        ...{      
            e.printStackTrace();   
        }
        catch(NoSuchValueException e)
        ...{
            e.printStackTrace();   
        }
        catch (RegistryException e)
        ...{     
            e.printStackTrace();    
        }
        return false;
    }
    
    //删除注册表中某节点下的某节点
    public static boolean deleteSubKey(String folder,String subKeyNode)
    ...{
        try 
        ...{      
            RegistryKey software = Registry.HKEY_LOCAL_MACHINE.openSubKey(folder);
            software.deleteSubKey(subKeyNode);
            software.closeKey();   
            return true;
        } 
        catch (NoSuchKeyException e) 
        ...{      
            e.printStackTrace();   
        } 
        catch (RegistryException e)
        ...{     
            e.printStackTrace();    
        }
        return false;
    }
    
    //打开注册表项并读出相应的变量名的值  
    public static String getValue(String folder,String subKeyNode,String subKeyName)
    ...{
        String value = "";
        try 
        ...{      
            RegistryKey software = Registry.HKEY_LOCAL_MACHINE.openSubKey(folder);
            RegistryKey subKey = software.openSubKey(subKeyNode); 
            value = subKey.getStringValue(subKeyName); 
            subKey.closeKey();  
        } 
        catch (NoSuchKeyException e) 
        ...{      
            value = "NoSuchKey";
            //e.printStackTrace();   
        } 
        catch(NoSuchValueException e)
        ...{
            value = "NoSuchValue";
            //e.printStackTrace();   
        }
        catch (RegistryException e)
        ...{     
            e.printStackTrace();    
        }
        return value;
    }
  /**//*
    //测试
    public static void main(String[] args)
    {
        String today = shortDateFormat.format(new java.util.Date());
        setValue("SOFTWARE","Plan\RegistInfo","RegistDate",today);
        String value = getValue("SOFTWARE","Plan\RegistInfo","LastLoginDate");

        System.out.println(getValue("SOFTWARE","Plan\RegistInfo","LastLoginDate"));
        //deleteValue("SOFTWARE","Plan\RegistInfo","LastLoginDate");

       
          java.util.Timer timer = new java.util.Timer();   
          timer.scheduleAtFixedRate(new TimerTask(){
             public void run()
             {
                 System.out.println(getValue("SOFTWARE","EPlan\RegistInfo","LastLoginDate"));
             }
          },5000,2000);
        
    }
  */
}

 

此方法需要调用Registry.jar包以及ICE_JNIRegistry.dll。dll去放在system32里即可,或者其它自定义的classpath

http://www.gjt.org/download/time/java/jnireg/registry-3.1.3.zip 

 

分享到:
评论

相关推荐

    最新java操作注册表的com.ice.jni.registry依赖压缩包

    是一个Java库,它提供了这样的功能,利用JNI(Java Native Interface)技术实现了对注册表的原生访问。JNI是Java平台的一部分,允许Java代码和其他语言写的代码进行交互,特别是在需要高性能或系统级功能时。 `...

    Java操作注册表插件

    为了实现这个功能,开发者通常会利用Java的JNI(Java Native Interface)或者JNA(Java Native Access)库,这些库允许Java代码调用本地(操作系统级)函数,包括Windows API中的注册表操作函数。 Z平台在这里可能...

    基于Java的注册表操作类 jared.zip

    然而,开发者可以利用Java的"java.lang.Runtime"或"java.lang.ProcessBuilder"类来执行操作系统命令,间接实现注册表操作。除此之外,还有一些第三方库,如JRegistryKey(可能就是"jared_011"),提供了更方便的API...

    使用java修改windows注册表实用.pdf

    - 适用于需要高度定制化和控制注册表操作的高级应用开发。 3. **实现方式**: - 下载并引入GDAPI库。 - 使用`com.ice.jni.registry.WindowsRegistry`类来执行注册表操作。 4. **优缺点**: - **优点**:提供了...

    java_修改注册表

    综上所述,"java_修改注册表"这个主题涵盖的内容相当深入,涉及到Java的系统级编程、JNI、Windows API和注册表操作。通过学习这些知识,开发者可以扩展Java的应用范围,使其能够解决更复杂的问题,比如系统集成和...

    Java JNI 编程

    然而,由于注册表是Windows特有的组件,标准的Java类库并不支持直接访问Windows注册表的操作。这就需要采用JNI技术来实现这一功能。 ##### 3.1 使用JNI访问Windows注册表的方法 1. **JNI库的编写**:首先需要使用C...

    利用JAVA向注册表里写信息

    通过本文的介绍,我们了解到利用JAVA进行注册表操作的两种主要方式:Preferences API和JNI。前者简单易用,适用于简单的配置存储需求;后者则提供了更强大的功能,适用于复杂的注册表操作场景。开发者可以根据具体...

    com.ice.jni.registry

    这个库利用JNI(Java Native Interface)技术,允许Java代码直接调用本地(通常是C或C++编写的)库来与操作系统底层交互,特别是在这里,是与Windows系统的注册表进行读写。 注册表是Windows操作系统中的一个重要...

    reglib:使用JNI在Java中使用Windows注册表

    `reglib`项目就是一个很好的示例,它利用JNI(Java Native Interface)技术,让Java程序能够方便地在Windows平台上操作注册表。本文将详细讲解`reglib`的相关知识点,包括JNI的基本概念、使用步骤以及如何通过`...

    registry.jar java读写注册表的开源库

    总的来说,`registry.jar`是一个强大的工具,使得Java开发者能够轻松地在Windows平台上进行注册表操作。通过它的源代码,开发者可以学习到如何利用JNI技术进行跨平台的系统级编程,同时也可以根据项目的特定需求进行...

    java操作IE代理

    首先,"registry.jar"可能是一个包含了对Windows注册表操作功能的Java库。在Windows系统中,IE的代理设置是存储在注册表中的,因此,要改变IE的代理设置,我们可能需要读写注册表的相关键值。通过这个库,我们可以...

    java native 中的C代码

    这个"java native 中的C代码"主题涉及到Java程序如何利用JNI来调用本地(非Java)代码,特别是在处理操作系统特定功能,如访问注册表这样的任务时。 当我们谈论"注册表",这是在Windows操作系统中存储配置信息的...

    JNI中文手册

    JNI在Java虚拟机(JVM)内部运行的Java代码和用C、C++、汇编等语言编写的应用程序之间架起了一座桥梁,极大地扩展了Java的功能,特别是在性能敏感或者需要利用特定硬件功能的场景下。 JNI手册是学习和理解JNI技术的...

    深入浅出JNI培训资料

    2. **注册本地方法**:Java类加载时,通过JNI注册表将本地方法与Java方法关联。 3. **调用本地方法**:Java代码通过反射或直接调用本地方法。 4. **执行本地方法**:本地方法执行,可以访问Java对象、执行Java操作。...

    JNI基础资料

    总的来说,JNI是Java世界与本地代码世界的桥梁,它为开发者提供了丰富的工具,使得Java应用能够充分利用本地资源,提升性能,或者利用已有的C/C++库。尽管学习JNI可能有一定难度,但掌握了这些基础知识,你就能自如...

    Android 5.0jni调用

    8. **JNI注册表**:在早期版本中,JNI函数需要通过注册表手动注册。在Android 5.0中,可以使用`RegisterNatives`或者`JNI_OnLoad`方法自动注册,简化了代码。 9. **性能优化**:Android 5.0还对JNI调用的性能进行了...

    JNI技术之动态注册与JNI线程.pdf

    JNI(Java Native Interface)是Java平台的一个标准组件,它允许Java代码和其他语言写的代码进行交互。...学习这部分内容有助于开发者更高效地利用JNI进行跨语言编程,特别是在优化性能和处理底层操作时。

    JAVA 修改MAC

    要操作Windows注册表,我们可以使用Java的JNI(Java Native Interface)或者JNA(Java Native Access)库。JNA是更推荐的方式,因为它不需要编译C/C++代码,可以直接在Java中调用Windows API。 以下是一个简单的...

    ANDROID4.0 JNI DEMO

    在"ANDROID4.0 JNI DEMO"中,我们主要探讨的是如何在Android 4.0 (Ice Cream Sandwich, ICS)系统上利用JNI进行原生代码开发。这个R7版本可能是针对该特定Android SDK的更新。 **JNI基础知识** 1. **JNI结构**:JNI...

Global site tag (gtag.js) - Google Analytics