修改注册表自启动程序demo

在这里插入图片描述

修改注册表核心方法

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); // 设置界面可视化
	}
}

猜你喜欢

转载自blog.csdn.net/qq_44624722/article/details/114281902