java实现桌面程序开机自启动
问题:
最近用java写一个桌面闹钟程序,需要实现开机自启动功能
解决办法:
jna官网:https://github.com/java-native-access/jna?tab=readme-ov-file
使用jna库可以轻松实现
下载jna-5.15.0.jar和jna-platform-5.15.0.jar这两个库文件,加入到工程
下面给出是工具类
package org.lionsoul.dclock.util;import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.WinReg;public class RegistryUtil {public static void addStartup(String name, String path){Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", name, path);}public static void deleteStartup(String name){Advapi32Util.registryDeleteValue(WinReg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", name);}public static boolean isStartWithSystem(String name) {String dhRegister = getReg("Software\\Microsoft\\Windows\\CurrentVersion\\Run", name);// String dClock = WinRegistry.getString(WinRegistry.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", name);System.out.println("isStartWithSystem dhRegister :" + dhRegister);if (dhRegister != null && dhRegister.length() > 0){return true;}return false;}public static String getReg(String key, String valueName) {String value;try {value = Advapi32Util.registryGetStringValue(WinReg.HKEY_CURRENT_USER, key, valueName);} catch (Exception e) {value = "";}return value;}}
调用的代码:
if (RegistryUtil.isStartWithSystem(__APP_NAME) ) {RegistryUtil.deleteStartup(__APP_NAME);
} else {RegistryUtil.addStartup(__APP_NAME, System.getProperty("user.dir") + "\\DHClock.cmd");
}