Windows启动程序有很多方法,但通过注册表启动应该是最简单的方法。
注册表注册表(Registry,繁体中文版Windows操作系统称为登录档)Microsoft Windows用于存储系统和应用程序设置信息的重要数据库。早在Windows 3.0推出OLE注册表出现在技术上。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 从95操作系统开始,注册表才真正成为Windows在随后的操作系统中,用户经常接触内容并继续使用。
打开注册表打开的方法有很多,个人习惯用搜索打开,用cmd也很方便。
注册表的数据结构注册表由键(又称主键或项),子键(子项)和值项构成。一键是分支中的文件夹,子键是文件夹中的子文件夹,子键也是一键。一个值是由名称、数据类型和分配值组成的键的当前定义。一个键可以有一个或多个值,每个值的名称不同。如果一个值的名称是空的,则该值为键的默认值。
注册表的数据类型主要有型:显示类型(在编辑器中)数据类型说明: REGSZ:字符串:文字字符路由网串 REGMULTISZ:多字符串值:包含多个文本值的字符串 REGBINARY:二进制数:二进制值,以十六进制显示, REG_DWORD:双字值;一个32位的二进制值,显示为8位的十六进制值。
注册表的根键编辑器从下图中的注册表(Win7系统)注册表中可以看到5个按钮,在Win98和95系统中还有一个关键HKEYDTNDATA。
HKEYCLASSESROOT:存储在这里的信息可以确保使用 Windows 打开文件时,资源管理器可以打开正确的程序。HKEYCLASSESROOT:存储在这里的信息可以确保使用 Windows 打开文件时,资源管理器可以打开正确的程序。这一项有时缩写为HKCR”。HKEYCURRENTUSER:包括当前登录用户配置信息的根目录。存储用户的文件夹、屏幕颜色和控制面板设置。这些信息与用户的配置文件有关。这一项有时缩写为HKCU”。HKEYLOCALMACHINE:包含特定于计算机的配置信息(用于任何用户)。这一项有时缩写为HKLM”。HKEYUSERS:所有用户配置文件都包含在计算机上。HKEYCURRENTUSER 是 HKEYUSERS 的子项。HKEY_USERS 有时缩写为有时缩写为HKU”。HKEYCURRENTCONFIG:本地计算机在系统启动时使用的硬件配置文件包含信息。HKEYDTN
DATA:动态信息,包括即插即用硬件信息。(仅存在于 路由网 Windows 95 及 98 中)HKEYLOCALMACHIN和HKEYUSERS注册表注册表中的两个按钮,其余的都是他们衍生出来的。事实上,它们都是两个按钮下的一些自键映射。如HKEYCLASSROOT是HKEYLOCALMACHINE下SOFTWARE/Classes子键映射,HKEY
CURRENTCONFIG根键是HKEYLOCAL_MACHINE下Config子键映射。注册表本质
我们看到的注册表结构是在注册表编辑器读取后呈现给我们的,它的磁盘形式不是一个简单的大文件,但是一组被称为HⅣE单独的文件形式,HⅣE中文叫储巢。每个HⅣE文件可以理解为单独注册的表树,就像Windows的PE格式相同,它也有自己的组织形式。注册表编程在下面的表弟中列出了常用的注册表API及其功能。
API功能RegCreateKey创建一个KEY,并返回相应的HKEYRegOpenKey打开注册表,得到一个HKEY,作为以下函数的第一个参数。RegOpenKeyEx同RegOpenKey类似地,很少使用,增加了访问控制类型参数。RegSetValue设置一个HKEY的默认值RegSetValueEx设置一个HKEY除默认值以外的其他值RegQueryValue获取一个HKEY的默认值RegQueryValueEx获取一个HKEY除默认值以外的其他值RegDeleteKey删除一个KEY,此KEY不能包含子KEYSHDeleteKey删除一个KEY以及所有子KEYRegDeleteValue删除KEY里面的值RegCloseKey关闭注册表开机启动Windows设置注册表启动启动
在注册表中定位为计算机\\HKEY路由知识LOCALMACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",可以看出VBoxTRay启动时会启动。
检查过程如下:
如果你想在下一次开机后停止运行,你可以在计算机\\HKEYLOCALMACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce”中操作。
启动动源代码
下面的代码通过启动自启动execel使用此应用程序的方法是键"\\HKEYLOCALMACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"写值。
启动动源代码
MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";写值。同时还有一些注册表常用的操作。
#include <Windows.h>#include <iostream>using namespace std;int WriteReg(char* path, char* key, char* value);/************************************@ Brief: 开机启动@ Author: 无情剑客@ Created: 2020/08/25 七夕传统节日@ Return:************************************/void autostart(){ //1. 开启启动execel WriteReg("SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run", "execel", "C:\\\\Program Files (x86)\\\\Office 2007\\\\Office12\\\\EXCEL.exe"); //2.获得本程序本身的全路径 TCHAR strExeFullDir[MAX_PATH]; GetModuleFileName(NULL, strExeFullDir, MAX_PATH); //3. 启动当前程序 WriteReg("SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run", "Register", strExeFullDir);}/************************************@ Brief: 打开注册表,读取Key对应value@ Author: 无情剑客@ Created: 2020/08/25 七夕传统节日@ Return:************************************/int ReadReg(char* path, char* key, char* value){ HKEY hKey; int ret = RegOpenKeyEx(HKEY_CURRENT_USER, path, 0, KEY_EXECUTE, &hKey); if (ret != ERROR_SUCCESS){ cout << "打开注册表失败" << endl; return 1; }//读取KEY DWORD dwType = REG_SZ; ///数据类型 DWORD cbData = 256; ret = RegQueryValueEx(hKey, key, NULL, &dwType, (LPBYTE)value, &cbData); if (ret == ERROR_SUCCESS){ cout << value << endl; }else{ cout << "阅读注册表KEY 失败" << endl; RegCloseKey(hKey); return 1; }RegCloseKey(hKey); return 0;}/************************************@ Brief: 写注册表,如果没有自动创建@ Author: 无情剑客@ Created: 2020/08/25 七夕传统节日@ Return:************************************/int WriteReg(char* path, char* key, char* value){ HKEY hKey; DWORD dwDisp; DWORD dwType = REG_SZ; ///数据类型 int ret = RegCreateKeyEx(HKEY_CURRENT_USER, path,0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisp); if (ret != ERROR_SUCCESS){ cout << ";注册表创建失败;" << endl; return 1; }ret == RegSetValueEx(hKey, key, 0, dwType, (BYTE*)value, strlen(value)); if (ret != ERROR_SUCCESS){ cout << "创建注册表KEY VALUE失败" << endl; RegCloseKey(hKey); return 1; }RegCloseKey(hKey); return 0;}/************************************@ Brief: 删除注册表@ Author: 无情剑客@ Created: 2020/08/25 七夕传统节日@ Return:************************************/int DelReg(char* path){ int ret = RegDeleteKey(HKEY_CURRE NT