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

0  概述

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

1  使用者模式

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

 

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

 

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, 0, MAX_PATH);
       if (GetModuleFileName(NULL, szFilePath, MAX_PATH))
       {
              HKEY hKey;
             CString strRegPath = _T("SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
              if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegPath, 0, KEY_SET_VALUE, &hKey) == ERROR_SUCCESS)
              {
                   RegSetValueEx(hKey, _T("AutoRun"), 0, REG_SZ, (LPBYTE)szFilePath, (lstrlen(szFilePath) + 1)*sizeof(TCHAR));
              }
              RegCloseKey(hKey);
       }
}

inline void ReSetAutoRun()
{
      HKEY hKey;
      CString strRegPath = _T("SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
      if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegPath, 0, KEY_SET_VALUE, &hKey) == ERROR_SUCCESS)
      {
          RegDeleteValue(hKey, _T("AutoRun"));
      }
      RegCloseKey(hKey);
}    

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

  CString strFilePath;
   TCHAR szFilePath[MAX_PATH];
   memset(szFilePath, 0, 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("0"), strFilePath);
       } 
       else 
       { 
           SetAutoRun(); 
           WritePrivateProfileString(_T("AutoRun"), _T("AutoRun"), _T("1"), strFilePath);
       }
   }

6、  编译运行:

 

             PS:

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

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

 

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

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

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

原文地址:https://www.cnblogs.com/MakeView660/p/6214455.html