VC++ 设置软件开机自启动的方法

0  概述

软件开机自启动是比较常用的做法,设置方法也有好几种。

1  使用者模式

在“开始菜单”的所有程序中有个“启动”文件夹,可以将需要设置为开机启动的应用程序放在这个文件夹中。但是,这样做存在不足:“启动”文件夹路径在每台电脑有可能是不同的,没法做到一劳永逸。

VC++ 设置软件开机自启动的方法

同时,如果要禁止程序开机启动,可将“启动”文件夹中对应的程序文件移除,也可以“Win+R”输入“msconfig”进行手动设置:

VC++ 设置软件开机自启动的方法

2  开发者模式

作为开发人员,当然写注册表是最好的方法:

  1、  新建一个基于对话框的MFC应用程序AutoRun;

  2、  添加一个Check Box,ID设置为IDC_CHECK_AUTORUN,文本“开机自启动~”;

  3、  在AutoRunDlg.h中添加私有成员变量:int m_nCheakState;

  4、  在AutoRunDlg.cpp开始加入代码:

inline void SetAutoRun()
{
TCHAR szFilePath[MAX_PATH];
memset(szFilePath, , MAX_PATH);
if (GetModuleFileName(NULL, szFilePath, MAX_PATH))
{
HKEY hKey;
CString strRegPath = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegPath, , KEY_SET_VALUE, &hKey) == ERROR_SUCCESS)
{
RegSetValueEx(hKey, _T("AutoRun"), , REG_SZ, (LPBYTE)szFilePath, (lstrlen(szFilePath) + )*sizeof(TCHAR));
}
RegCloseKey(hKey);
}
} inline void ReSetAutoRun()
{
HKEY hKey;
CString strRegPath = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegPath, , KEY_SET_VALUE, &hKey) == ERROR_SUCCESS)
{
RegDeleteValue(hKey, _T("AutoRun"));
}
RegCloseKey(hKey);
}

5、  双击OK按钮,写入代码:

  CString strFilePath;
TCHAR szFilePath[MAX_PATH];
memset(szFilePath, , MAX_PATH);
if (GetModuleFileName(NULL, szFilePath, MAX_PATH))
{
strFilePath = szFilePath;
strFilePath = strFilePath.Left(strFilePath.ReverseFind('\\'));
strFilePath += _T("\\AutoRun.ini");
} CButton* pBtn = (CButton*)GetDlgItem(IDC_CHECK_AUTORUN);
int nCheakState = pBtn->GetCheck();
if (m_nCheakState != nCheakState)
{
if(nCheakState == BST_UNCHECKED)
{
ReSetAutoRun();
WritePrivateProfileString(_T("AutoRun"), _T("AutoRun"), _T(""), strFilePath);
}
else
{
SetAutoRun();
WritePrivateProfileString(_T("AutoRun"), _T("AutoRun"), _T(""), strFilePath);
}
}

6、  编译运行:

VC++ 设置软件开机自启动的方法

PS:

    1、  设置开机自启动后,我未能在SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run下找到我设置的注册表键值,重新启动后生效了~

    2、  Debug目录下生成的文件,任务栏右击显示“TOD<文件说明>”

VC++ 设置软件开机自启动的方法

    版本信息中FileDescription已做过更改,但是不起作用,很纳闷~

    将Debug文件夹中的文件移动到其它目录,显示正确

    编译的Release文件夹中的文件也显示正确

上一篇:tmod命令


下一篇:cookieless domain