java操作注册表范例代码

java操作注册表实例代码

 

以下代码的作用是读取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操作注册表范例代码