获取程序自身路径详见http://huidong.xyz/?mode=2&id=172
把这个开机自启动的代码做成了一个函数,复制代码后直接调用即可,上码:
//要添加这两个头文件,缺一不可
#include <windows.h>
#include <winuser.h>
void HKRunator()
{
//获取程序路径
char programName[100];
GetModuleFileName(NULL, programName, 100); //调用win api 获得路径
//获取程序路径 -- 结束
HKEY hkey = NULL;
DWORD rc;
rc = RegCreateKeyEx(HKEY_LOCAL_MACHINE, //创建一个注册表项,如果有则打开该注册表项
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hkey,
NULL);
if (rc == ERROR_SUCCESS)
{
rc = RegSetValueEx(hkey,
"MyApp", /* 改为你的程序名称 */
0,
REG_SZ,
(const BYTE *)programName,
strlen(programName));
if (rc == ERROR_SUCCESS)
{
RegCloseKey(hkey);
}
}
}
注意,程序必须以管理员模式开启,注册表写入才生效
各字符集通用版,需要传入路径参数:
// programName 要设置开机自启的程序路径
// 返回值:表示是否设置成功
bool HKRunator(const TCHAR* programName)
{
HKEY hkey = NULL;
DWORD rc;
rc = RegCreateKeyEx(HKEY_LOCAL_MACHINE, //创建一个注册表项,如果有则打开该注册表项
_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hkey,
NULL);
if (rc == ERROR_SUCCESS)
{
rc = RegSetValueEx(hkey,
_T("YourAppName"), /* 改为你的程序名称 */
0,
REG_SZ,
(const BYTE*)programName,
lstrlen(programName));
if (rc == ERROR_SUCCESS)
{
RegCloseKey(hkey);
}
}
else
{
return false;
}
return true;
}
注意,函数里YourAppName那个字符串的地方,如果设置的是不同的程序开机自启,那么这个YourAppName也不能一样。