標籤:esc current 自啟 script 不同 size 開發 c++ 路徑
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檔案夾中的檔案也顯示正確
VC++ 設定軟體開機自啟動的方法