修改登錄檔自啟動程式demo
阿新 • • 發佈:2021-03-16
修改登錄檔核心方法
package com.changestart.service;
import java.io.IOException;
public class ChangeStartService {
/**
* 通過修改登錄檔設定是否開機自動啟動
* Reg 引數說明 /v 所選項之下要新增或刪除的值名 /t RegKey 資料型別(reg_sz字串) /d 要分配給新增的登錄檔
* ValueName 的資料 /f 不用提示就強行刪除
* @param isStartAtLogon
* @throws IOException
*/
public static void changeStart(boolean isStartAtLogon) throws IOException {
final String regKey = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
String myAppName = "AutoStartTest";
//exe4j中定義的程式運行當前路徑,在exe4j中配置-Dexe.path=${EXE4J_EXEDIR}
String runPath = System. getProperty("exe.path");
String exePath = "\""+runPath+"AutoStart.exe"+"\"";
Runtime.getRuntime().exec("reg " + (isStartAtLogon ? "add " : "delete ") + regKey + " /v "
+ myAppName + (isStartAtLogon ? " /t reg_sz /d " + exePath : " /f"));
}
}
程式介面
package com.changestart.view;
import java.awt.*; //導包
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.*;
import com.changestart.service.ChangeStartService;
public class ChangeStartView extends JFrame { // 繼承JFrame頂級容器類
// 定義元件
JPanel jp1, jp2; // 定義面板元件
JLabel jlb1, jlb2; // 定義標籤元件
JButton btn_submit, btn_cancel; // 定義按鈕元件
JCheckBox jcb_start; // 定義多選框元件
public static void main(String[] args) {
new ChangeStartView(); // 顯示介面
}
public ChangeStartView() {
// 建立元件
jp1 = new JPanel(); // 建立面板
jp2 = new JPanel();
btn_submit = new JButton("儲存"); // 建立按鈕
btn_cancel = new JButton("退出");
jlb1 = new JLabel("是否自啟動?"); // 建立標籤
jcb_start = new JCheckBox("自啟"); // 建立複選框
// 設定佈局管理器
this.setLayout(new GridLayout(2, 1)); // 三行一列網格佈局
// 新增元件
this.add(jp1);
this.add(jp2);
jp1.add(jlb1); // 新增面板1的元件
jp1.add(jcb_start);
jp2.add(btn_submit); // 新增面板2的元件
jp2.add(btn_cancel);
btn_submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if (jcb_start.isSelected()) // 選中
{
int temp = JOptionPane.showConfirmDialog(ChangeStartView.this, "程式將開機自啟!", "提示", JOptionPane.YES_NO_OPTION);
if (temp == JOptionPane.YES_OPTION) {
try {
ChangeStartService.changeStart(true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//關閉當前視窗!
dispose();
}
} else {// 未選中
int temp = JOptionPane.showConfirmDialog(ChangeStartView.this, "將取消開機自啟!", "提示", JOptionPane.YES_NO_OPTION);
if (temp == JOptionPane.YES_OPTION) {
try {
ChangeStartService.changeStart(false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//關閉當前視窗!
dispose();
}
}
}
});
btn_cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
dispose();
}
});
// 設定窗體屬性
this.setTitle("修改登錄檔自啟動測試..."); // 設定介面標題
this.setSize(350, 150); // 設定介面畫素
this.setLocation(200, 200); // 設定介面初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 設定虛擬機器和介面一同關閉
this.setVisible(true); // 設定介面視覺化
}
}