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库,它提供了这样的功能,利用JNI(Java Native Interface)技术实现了对注册表的原生访问。JNI是Java平台的一部分,允许Java代码和其他语言写的代码进行交互,特别是在需要高性能或系统级功能时。 `...
为了实现这个功能,开发者通常会利用Java的JNI(Java Native Interface)或者JNA(Java Native Access)库,这些库允许Java代码调用本地(操作系统级)函数,包括Windows API中的注册表操作函数。 Z平台在这里可能...
然而,开发者可以利用Java的"java.lang.Runtime"或"java.lang.ProcessBuilder"类来执行操作系统命令,间接实现注册表操作。除此之外,还有一些第三方库,如JRegistryKey(可能就是"jared_011"),提供了更方便的API...
- 适用于需要高度定制化和控制注册表操作的高级应用开发。 3. **实现方式**: - 下载并引入GDAPI库。 - 使用`com.ice.jni.registry.WindowsRegistry`类来执行注册表操作。 4. **优缺点**: - **优点**:提供了...
综上所述,"java_修改注册表"这个主题涵盖的内容相当深入,涉及到Java的系统级编程、JNI、Windows API和注册表操作。通过学习这些知识,开发者可以扩展Java的应用范围,使其能够解决更复杂的问题,比如系统集成和...
然而,由于注册表是Windows特有的组件,标准的Java类库并不支持直接访问Windows注册表的操作。这就需要采用JNI技术来实现这一功能。 ##### 3.1 使用JNI访问Windows注册表的方法 1. **JNI库的编写**:首先需要使用C...
通过本文的介绍,我们了解到利用JAVA进行注册表操作的两种主要方式:Preferences API和JNI。前者简单易用,适用于简单的配置存储需求;后者则提供了更强大的功能,适用于复杂的注册表操作场景。开发者可以根据具体...
这个库利用JNI(Java Native Interface)技术,允许Java代码直接调用本地(通常是C或C++编写的)库来与操作系统底层交互,特别是在这里,是与Windows系统的注册表进行读写。 注册表是Windows操作系统中的一个重要...
`reglib`项目就是一个很好的示例,它利用JNI(Java Native Interface)技术,让Java程序能够方便地在Windows平台上操作注册表。本文将详细讲解`reglib`的相关知识点,包括JNI的基本概念、使用步骤以及如何通过`...
总的来说,`registry.jar`是一个强大的工具,使得Java开发者能够轻松地在Windows平台上进行注册表操作。通过它的源代码,开发者可以学习到如何利用JNI技术进行跨平台的系统级编程,同时也可以根据项目的特定需求进行...
首先,"registry.jar"可能是一个包含了对Windows注册表操作功能的Java库。在Windows系统中,IE的代理设置是存储在注册表中的,因此,要改变IE的代理设置,我们可能需要读写注册表的相关键值。通过这个库,我们可以...
这个"java native 中的C代码"主题涉及到Java程序如何利用JNI来调用本地(非Java)代码,特别是在处理操作系统特定功能,如访问注册表这样的任务时。 当我们谈论"注册表",这是在Windows操作系统中存储配置信息的...
JNI在Java虚拟机(JVM)内部运行的Java代码和用C、C++、汇编等语言编写的应用程序之间架起了一座桥梁,极大地扩展了Java的功能,特别是在性能敏感或者需要利用特定硬件功能的场景下。 JNI手册是学习和理解JNI技术的...
2. **注册本地方法**:Java类加载时,通过JNI注册表将本地方法与Java方法关联。 3. **调用本地方法**:Java代码通过反射或直接调用本地方法。 4. **执行本地方法**:本地方法执行,可以访问Java对象、执行Java操作。...
总的来说,JNI是Java世界与本地代码世界的桥梁,它为开发者提供了丰富的工具,使得Java应用能够充分利用本地资源,提升性能,或者利用已有的C/C++库。尽管学习JNI可能有一定难度,但掌握了这些基础知识,你就能自如...
8. **JNI注册表**:在早期版本中,JNI函数需要通过注册表手动注册。在Android 5.0中,可以使用`RegisterNatives`或者`JNI_OnLoad`方法自动注册,简化了代码。 9. **性能优化**:Android 5.0还对JNI调用的性能进行了...
JNI(Java Native Interface)是Java平台的一个标准组件,它允许Java代码和其他语言写的代码进行交互。...学习这部分内容有助于开发者更高效地利用JNI进行跨语言编程,特别是在优化性能和处理底层操作时。
要操作Windows注册表,我们可以使用Java的JNI(Java Native Interface)或者JNA(Java Native Access)库。JNA是更推荐的方式,因为它不需要编译C/C++代码,可以直接在Java中调用Windows API。 以下是一个简单的...
在"ANDROID4.0 JNI DEMO"中,我们主要探讨的是如何在Android 4.0 (Ice Cream Sandwich, ICS)系统上利用JNI进行原生代码开发。这个R7版本可能是针对该特定Android SDK的更新。 **JNI基础知识** 1. **JNI结构**:JNI...