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文件夾中的文件也顯示正確


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM