MFC小笔记:开机自动启动

一、需求

本文实现MFC程序的开机自动启动功能。

二、设计

开机自动启动,可以通过注册表实现。在Run节点下,新建一个字段,包括程序名称、完整的路径。如果要取消自动启动,则删除该字段即可。

三、编码

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
int SetAutorun(BOOL nEnable)
{
// 获取程序路径
CString sPath;
GetModuleFileName(NULL, sPath.GetBufferSetLength(MAX_PATH + 1), MAX_PATH);
char lpPath[MAX_PATH] = {0};
strcpy_s(lpPath, (const char*)sPath.GetBuffer());
HKEY hkey;
DWORD dwLen = MAX_PATH;
int ret = -1;

// 注意,不能使用HKEY_LOCAL_MACHINE,权限不够
ret = RegOpenKeyEx(HKEY_CURRENT_USER,
_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\"),
0, KEY_WRITE, &hkey);
if (ret != ERROR_SUCCESS)
{
return -1;
}

if (nEnable)
{
RegSetValueEx(hkey, _T("MyTest"), 0, REG_SZ, (CONST BYTE *)sPath.GetBuffer(), dwLen);

}
else
{
RegDeleteValue(hkey, _T("MyTest"));
}

RegCloseKey(hkey);

return 0;
}