Browse Source

增加注册表操作

master
VIVIMAN 3 years ago
parent
commit
73343f5224
  1. 13
      pom.xml
  2. 87
      src/main/java/com/insigma/utils/WinCommandUtil.java

13
pom.xml

@ -187,6 +187,19 @@
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.jianggujin/JRegistry -->
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.5.0</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>5.5.0</version>
</dependency>
</dependencies>
<build>

87
src/main/java/com/insigma/utils/WinCommandUtil.java

@ -1,8 +1,11 @@
package com.insigma.utils;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.WinReg;
import java.io.*;
/**
@ -72,4 +75,88 @@ public class WinCommandUtil implements Runnable {
}
}
}
/**
* TODO 实现注册表操作<br/>
* 需要在调用命令位置前增加控制命令<br/>
* %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit <br/>
*/
public static class RegisterUtil {
/**
* 向指定目录下的keyPath中, 写入key-value
* HKEY不同时, 可能会出现 "拒绝访问" 的问题, 此时需要手动打开注册表, 修改对应的keyPath父级目录(此处为SOFTWARE)的全部读写权限
* @param path
* @param key 操作值
* @param value 设置值
*/
public static boolean writeToRegistry(@NonNull String path, @NonNull String key, @NonNull String value, @NonNull String type) {
log.info("操作:{} , {} , {}", path, key, value);
// 判断KeyPath是否存在
boolean isOkay = Advapi32Util.registryKeyExists(WinReg.HKEY_LOCAL_MACHINE, path);
// 若不存在
if (!isOkay) {
try {
// 创建keyPath(即, 目录)
Advapi32Util.registryCreateKey(WinReg.HKEY_LOCAL_MACHINE, path);
} catch (Exception e) {
log.error("操作发生异常:{}", e.getMessage());
// 遇到异常, 写入失败
return false;
}
}
try {
// 向指定目录下的KeyPath中, 写入key及其value
Advapi32Util.registrySetStringValue(WinReg.HKEY_LOCAL_MACHINE, path, key, value);
} catch (Exception e) {
log.error("操作发生异常:{}", e.getMessage());
// 遇到异常, 写入失败
return false;
}
// 写入成功
return true;
}
/***
* 删除注册表中的keyPath及旗下key-value对
* @param path 操作路径 "SOFTWARE\\你要添加的keyPath"
* @return
*/
public static boolean deleteRegistryKey(@NonNull String path) {
log.info("假定操作:{} ", path);
try {
// Delete a key
Advapi32Util.registryDeleteKey(WinReg.HKEY_LOCAL_MACHINE, path);
} catch (Exception e) {
log.error("操作发生异常:{}", e.getMessage());
// 删除失败
return false;
}
// 删除成功
return true;
}
/**
* 从注册表中读取key对应的value值
* @param path 操作路径 "SOFTWARE\\你要添加的keyPath"
* @param key 操作值
* @return
*/
public static String readKeyFromRegistry(@NonNull String path, @NonNull String key) {
String value = null;
try {
// 根据 key(value所在目录) 返回注册表中类型为 REG_SZ 的 value 对应的值
value = Advapi32Util.registryGetStringValue(WinReg.HKEY_LOCAL_MACHINE, path, key);
} catch (Exception e) { // 对应key不存在
log.error("操作发生异常:{}", e.getMessage());
}
return value;
}
}
}
Loading…
Cancel
Save