|
|
@ -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; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |