以下代码的作用是读取USB设备:
package org.yangzc.reglistener;
import com.ice.jni.registry.Registry;
import com.ice.jni.registry.RegistryKey;
import com.ice.jni.registry.RegistryValue;
/**
* 操作注册表实例
* @author yangzc
*
*/
public class Domain1 {
private static final String REG_PATH = "SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{53f56307-b6bf-11d0-94f2-00a0c91efb8b}";
private static final String REG_USBSTOR_Path = "SYSTEM\\CurrentControlSet\\Enum\\USB";
public static void main(String[] args) {
try {
RegistryKey child = Registry.HKEY_LOCAL_MACHINE.openSubKey(REG_PATH);
String curDeviceId = "";
for(int i=0; i< child.getNumberSubkeys(); i++){
try{
String key = child.regEnumKey(i);
RegistryKey devicekey = child.openSubKey(key, RegistryKey.ACCESS_READ);
RegistryKey ctrlkey =child.openSubKey(key, RegistryKey.ACCESS_READ).openSubKey("#\\Control", RegistryKey.ACCESS_READ);
RegistryValue value = ctrlkey.getValue("Linked");
if(value.getType() == RegistryValue.REG_DWORD){
String deviceInstance = devicekey.getStringValue("DeviceInstance");
String deviceInfo[] = deviceInstance.split("\\\\");
if(value.getByteData()[value.getByteLength()-1] == 1 && "".equals(curDeviceId)){
System.out.println("USB设备:" + deviceInfo[1] + "已经连接");
System.out.println("序列号:" + deviceInfo[2]);
RegistryKey usb = getUsbValue(deviceInfo[2].split("&")[0]);
if(usb != null){
System.out.println("设备描述:" + usb.getStringValue("DeviceDesc"));
System.out.println("硬件ID:" + usb.getStringValue("HardwareID"));
}
}
}
}catch(Exception e){
}
}
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 返回USB设备
* @param serialNo
* @return
*/
private static RegistryKey getUsbValue(String serialNo){
try {
String subkey1 = null;
RegistryKey child = Registry.HKEY_LOCAL_MACHINE.openSubKey(REG_USBSTOR_Path);
for(int i=0; i< child.getNumberSubkeys(); i++){
String key = child.regEnumKey(i);
System.out.println(key);
RegistryKey devicekey = child.openSubKey(key, RegistryKey.ACCESS_READ);
int subKeys = devicekey.getNumberSubkeys();
for(int j=0; j< subKeys; j++){
String subkey = child.regEnumKey(j);
if(subkey.startsWith(serialNo)){
subkey1 = subkey;
}
}
return devicekey.openSubKey(subkey1, RegistryKey.ACCESS_READ);
}
} catch (Exception e) {
}
return null;
}
}
工程目录结构如下:

分享到:
相关推荐
在Java编程环境中,有时我们需要与操作系统进行交互,例如读取或修改Windows注册表中的信息。在Java标准库中并没有提供直接操作注册表的API,但可以通过一些第三方库来实现这一功能。这里提到的"java 读取注册表...
Java操作注册表是Java开发中一项实用但不常见的任务,主要涉及到系统级别的设置和管理。JRegistry库就是专为此目的设计的,版本1.8提供了对Windows注册表的简便访问和操作。在这个压缩包中,你将找到关于如何使用...
"基于Java的实例源码-注册表操作类 jared.zip" 提供了一个用Java实现的注册表操作类,这对于理解如何在Java应用程序中与Windows注册表交互非常有帮助。下面将详细介绍这个知识点。 首先,Windows注册表是一个存储...
JNI 允许 Java 代码调用本地(操作系统特定)代码,从而能够直接操作 Windows API 来操作注册表。不过,这将丧失 Java 的跨平台特性,并且需要编写 C/C++ 代码与 Java 代码交互。 总结来说,Java 通过 `java.util....
这个库名为`registry3.1.3.jar`,包含了源代码,使得开发者可以深入理解其内部工作原理,同时也提供了`ICE_JNIRegistry.dll`,这是一个本地接口,用于与Java虚拟机(JVM)进行通信,实现注册表的低级别操作。...
### 知识点 #### JavaScript修改注册表能力 ...该实例代码提供了一种操作注册表的技术途径,展示了如何修改特定的注册表项来控制浏览器行为和安全设置,但同时也提醒了操作者必须小心谨慎,避免产生不可预见的副作用。
以下是关于 Memcached 缓存系统、Java 缓存框架以及实例代码的详细说明: 1. **Memcached 基础** - **Cache 定义**:Cache 通常被用来协调不同速度设备之间的数据传输,包括硬件级别的 CPU Cache 和软件层面的...
本实例旨在通过简洁易懂的代码示例,帮助开发者理解如何在Java中实现串口通信。 首先,我们需要引入一个支持Java串口操作的库,如RXTX库。RXTX是一个开源的Java库,它提供了与操作系统底层串口通信的功能。在项目中...
2个G的java实例源码以及开源项目源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的... zip Java 数据库连接池 BoneCPjar Java 注册表操作类 jared . tgz Java 转 C ++代码工具J2C. jar OAuth 实现...
本实例旨在提供一个易于理解的Java RMI应用,帮助初学者快速掌握其基本概念和使用方法。完整的例子包括以下几个关键组成部分: 1. **接口定义**:在RMI中,远程对象需要实现一个接口,这个接口定义了可供远程调用的...
8. **跨平台兼容性**:"可直接运行在Linux和Windows平台上"表明这个测试代码考虑到了操作系统兼容性,意味着它应该使用了跨平台的Java API,没有依赖特定操作系统的特性。 9. **项目结构**:通常,RMI项目会包含...
- **编译代码**:确保所有的Java源代码都已正确编译为字节码文件。 - **运行服务器**:使用`java`命令运行服务器端程序,这将启动服务器并注册远程对象。 - **运行客户端**:在另一台机器或同一台机器的不同终端...
1. 只支持Java:由于RMI是Java特有的,它无法与其他语言的系统进行互操作。 2. 性能限制:RMI依赖于Java对象的序列化,这可能导致性能开销。 3. 安全性:RMI需要谨慎配置以防止恶意攻击,如代码注入。 综上所述,...
在Java RMI实例中,我们通常会经历以下几个步骤: 1. **创建远程接口**:首先,我们需要定义一个远程接口,这个接口需要扩展`java.rmi.Remote`。远程接口中的所有方法都需要抛出`RemoteException`,这是因为远程...
- `Server.java`:服务器端代码,创建并导出远程对象,将其绑定到RMI注册表。 - `Client.java`:客户端代码,查找并调用远程对象的方法。 - `RMIService.java`(可能的名称):一个服务器端辅助类,用于创建和管理...
**DWR(Direct Web Remoting)实例操作** DWR,全称为Direct Web Remoting,是一种在Web应用程序中实现Ajax(Asynchronous JavaScript and XML)技术的框架。它允许JavaScript与服务器端的Java代码进行直接交互,...
### Binder机制在应用程序框架层的Java接口源代码分析 #### 概述 Binder机制作为Android系统中的核心组件之一,主要用于实现不同进程间的通信(IPC)。本文将深入剖析Android应用程序框架层中Binder机制的Java接口...
了解飞鸽传书的JAVA源代码可以为开发者提供学习网络编程、文件传输和即时通讯机制的实例。通过研究源码,开发者可以学习到如何处理并发连接、优化传输速度、实现安全的文件传输以及如何设计用户友好的界面。此外,...
内容索引:Java源码,初学实例,Java实例 100个Java小实例源代码,学习Java的朋友可不要错过哦,肯定对你学习会有帮助的,内容涉及到数据库、图形、算法、字符串操作等,不一一说了。 简单的EJB、有状态SessionBean...