修改注册表核心方法
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); // 设置界面可视化
}
}