C++ Windows写开机启动项

本文介绍了一种在Windows系统中通过修改注册表来实现程序开机自动启动的方法,并提供了具体的C++代码示例,适用于Win7及XP系统。

//添加以下代码
HKEY hKey;   
//找到系统的启动项   
LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";   
//打开启动项Key   
long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey);   //win7下
//long lRet = RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0,KEY_WRITE, &hKey);   //xp
if(lRet == ERROR_SUCCESS)   
{   
char pFileName[MAX_PATH] ={0};  //得到程序自身的全路径 
GetModuleFileName(NULL,pFileName,MAX_PATH);
lRet = RegSetValueEx(hKey, "KNTITMS", 0, REG_SZ, (BYTE *)pFileName, strlen(pFileName)+1); 


//添加一个子Key,并设置值 // 下面的"test"是写入注册表中的名称 
RegCloseKey(hKey); //关闭注册表   
if(lRet != ERROR_SUCCESS)
{   
AfxMessageBox("系统参数错误,不能完成开机启动设置");   
}   
else  
{  
AfxMessageBox("打开开机启动成功");   
}   
}   




删除开机启动项
//添加以下代码
HKEY hKey;   
//找到系统的启动项   
LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";   
//打开启动项Key   
long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey);   
//long lRet = RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0,KEY_WRITE, &hKey);   
if(lRet == ERROR_SUCCESS)   
{   
char pFileName[MAX_PATH] ={0};  //得到程序自身的全路径 
GetModuleFileName(NULL,pFileName,MAX_PATH);
lRet = RegSetValueEx(hKey, "KNTITMS", 0, REG_SZ, (BYTE *)pFileName, strlen(pFileName)+1); 


//添加一个子Key,并设置值 // 下面的"test"是写入注册表中的名称 
RegCloseKey(hKey); //关闭注册表   
if(lRet != ERROR_SUCCESS)
{   
AfxMessageBox("系统参数错误,不能完成开机启动设置");   
}   
else  
{  
AfxMessageBox("打开开机启动成功");   
}   
}   

Windows系统中设置一个C++程序开机自动启动可以通过多种方式实现,以下是几种常见的方法: 1. **通过注册表编辑器配置开机启动项** Windows系统允许用户通过修改注册表来添加开机启动项。可以将你的C++程序的可执行文件路径添加到以下注册表键值中: ``` HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run ``` 或者对于所有用户生效: ``` HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run ``` 在该键下新建一个字符串值(`REG_SZ`),名称为你的程序名称,数据为其完整路径。 2. **通过任务计划程序设置开机启动** Windows的任务计划程序提供了一种更灵活的方式来配置开机启动任务。具体步骤如下: - 打开“任务计划程序”。 - 点击右侧的“创建任务”。 - 在“常规”选项卡中输入任务名称和描述。 - 在“触发器”选项卡中点击“新建”,选择“启动时”作为触发条件。 - 在“操作”选项卡中点击“新建”,选择“启动程序”,然后浏览并选择你的C++程序的可执行文件。 - 最后点击“确定”保存任务。 3. **将程序快捷方式放入启动文件夹** 另一种简单的方法是将程序的快捷方式放置在Windows启动文件夹中。启动文件夹的路径通常为: ``` C:\Users\<用户名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup ``` 将你的C++程序的`.exe`文件创建一个快捷方式,并将其复制到上述目录中。 4. **使用命令行或脚本配置启动项** 如果需要以编程方式配置开机启动项,可以使用`reg add`命令向注册表中添加新的启动项。例如: ```bash reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v MyCppApp /t REG_SZ /d "C:\Path\To\YourApp.exe" ``` 5. **确保程序具备自启动权限** 某些安全软件可能会阻止未授权的程序开机时自动运行,因此请确保你的程序已被列入白名单或获得用户许可。 6. **考虑程序的执行上下文与交互性** 如果你的C++程序依赖于图形界面或者需要与桌面进行交互,请注意Windows服务环境与普通用户会话之间的区别。如果使用任务计划程序,请确保勾选“不管用户是否登录都要运行”以及“使用最高权限”。 ### 示例代码:检查程序是否已设置为开机启动 下面是一个简单的C++代码示例,用于检查当前程序是否已在注册表中设置了开机启动项: ```cpp #include <windows.h> #include <iostream> bool isAutoStartEnabled() { HKEY hKey; const char* subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; const char* appName = "MyCppApp"; if (RegOpenKeyEx(HKEY_CURRENT_USER, subKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { char value[512]; DWORD size = sizeof(value); if (RegQueryValueEx(hKey, appName, nullptr, nullptr, (LPBYTE)value, &size) == ERROR_SUCCESS) { RegCloseKey(hKey); return true; } RegCloseKey(hKey); } return false; } void setAutoStart(bool enable) { HKEY hKey; const char* subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; const char* appName = "MyCppApp"; const char* appPath = "C:\\Path\\To\\YourApp.exe"; if (RegOpenKeyEx(HKEY_CURRENT_USER, subKey, 0, KEY_WRITE, &hKey) == ERROR_SUCCESS) { if (enable) { RegSetValueEx(hKey, appName, 0, REG_SZ, (const BYTE*)appPath, strlen(appPath) + 1); } else { RegDeleteValue(hKey, appName); } RegCloseKey(hKey); } } int main() { std::cout << "Current auto start status: " << (isAutoStartEnabled() ? "Enabled" : "Disabled") << std::endl; // 启用开机启动 setAutoStart(true); std::cout << "Auto start has been enabled." << std::endl; return 0; } ``` 编译并运行此程序即可查看并修改当前程序开机启动状态[^1]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值