很多監控軟件要求軟件能夠在系統重新啓動後不用用戶去點擊圖標啓動項目,而是直接能夠啓動運行,方法是寫註冊表Software//Microsoft//Windows//CurrentVersion//Run 。
參考程序可以見下:(查找程序目錄的執行文件,存在則進行添加註冊表操作)
//實用代碼一
int C***Dlg::CreateRun(void)
{
//添加以下代碼
HKEY RegKey;
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer();
int nPos;
nPos=sPath.ReverseFind('//');
sPath=sPath.Left(nPos);
CString lpszFile=sPath+"//getip.exe";//這裏加上你要查找的執行文件名稱
CFileFind fFind;
BOOL bSuccess;
bSuccess=fFind.FindFile(lpszFile);
fFind.Close();
if(bSuccess)
{
CString fullName;
fullName=lpszFile;
RegKey=NULL;
RegOpenKey(HKEY_LOCAL_MACHINE,"Software//Microsoft//Windows//CurrentVersion//Run",&RegKey);
RegSetValueEx(RegKey,"getip",0,REG_SZ,(const unsigned char*)(LPCTSTR)fullName,fullName.GetLength());//這裏加上你需要在註冊表中註冊的內容
this->UpdateData(FALSE);
}
else
{
//theApp.SetMainSkin();
::AfxMessageBox("沒找到執行程序,自動運行失敗");
exit(0);
}
return 0;
}
//把上面的getip(共2處)替換成自己想啓動程序的名字。
================================================
實用代碼二:
//寫入註冊表,開機自啓動
HKEY hKey;
//找到系統的啓動項
LPCTSTR lpRun = "Software//Microsoft//Windows//CurrentVersion//Run";
//打開啓動項Key
long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey);
if(lRet == ERROR_SUCCESS)
{
char pFileName[MAX_PATH] = {0};
//得到程序自身的全路徑
DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH);
//添加一個子Key,並設置值 // 下面的"getip"是應用程序名字(不加後綴.exe)
lRet = RegSetValueEx(hKey, "getip", 0, REG_SZ, (BYTE *)pFileName, dwRet);
//關閉註冊表
RegCloseKey(hKey);
if(lRet != ERROR_SUCCESS)
{
AfxMessageBox("系統參數錯誤,不能隨系統啓動");
}
}
一、當前用戶專有的啓動文件夾
這是許多應用軟件自動啓動的常用位置,Windows自動啓動放入該文件夾的所有快捷方式。用戶啓動文件夾一般在:/Documents and Settings/<用戶名字>/「開始」菜單/程序/啓動,其中“<用戶名字>”是當前登錄的用戶帳戶名稱。
二、對所有用戶有效的啓動文件夾
這是尋找自動啓動程序的第二個重要位置,不管用戶用什麼身份登錄系統,放入該文件夾的快捷方式總是自動啓動——這是它與用戶專有的啓動文件夾的區別所在。該文件夾一般在:/Documents and Settings/All Users/「開始」菜單/程序/啓動。
三、Load註冊鍵
介紹該註冊鍵的資料不多,實際上它也能夠自動啓動程序。位置:HKEY_CURRENT_USER/Software/Microsoft/WindowsNT/CurrentVersion/Windows/load。
四、Userinit註冊鍵
位置:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/Winlogon/Userinit。這裏也能夠使系統啓動時自動初始化程序。通常該註冊鍵下面有一個userinit.exe,如圖,但這個鍵允許指定用逗號分隔的多個程序,例如“userinit.exe,OSA.exe”(不含引號)。
五、Explorer/Run註冊鍵
和load、Userinit不同,Explorer/Run鍵在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具體位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer/Run,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/Explorer/Run。
六、RunServicesOnce註冊鍵
RunServicesOnce註冊鍵用來啓動服務程序,啓動時間在用戶登錄之前,而且先於其他通過註冊鍵啓動的程序。RunServicesOnce註冊鍵的位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunServicesOnce,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServicesOnce。
七、RunServices註冊鍵
RunServices註冊鍵指定的程序緊接RunServicesOnce指定的程序之後運行,但兩者都在用戶登錄之前。RunServices的位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunServices,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunServices。
八、RunOnce/Setup註冊鍵
RunOnce/Setup指定了用戶登錄之後運行的程序,它的位置是:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunOnce/Setup,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce/Setup。
九、RunOnce註冊鍵
安裝程序通常用RunOnce鍵自動運行程序,它的位置在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce和HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce鍵會在用戶登錄之後立即運行程序,運行時機在其他Run鍵指定的程序之前。HKEY_CURRENT_USER下面的RunOnce鍵在操作系統處理其他Run鍵以及“啓動”文件夾的內容之後運行。如果是XP,你還需要檢查一下HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnceEx。
十、Run註冊鍵
Run是自動運行程序最常用的註冊鍵,位置在:HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run,和HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run。HKEY_CURRENT_USER下面的Run鍵緊接HKEY_LOCAL_MACHINE下面的Run鍵運行,但兩者都在處理“啓動”文件夾之前。
有時候人們往往會爲了一個程序的啓動而頭痛,因爲一些用戶往往不知道那些文件是如何啓動的。所以經常會有些沒用的東西掛在系統上佔用資源。有時候也會有人因爲不知道如何啓動某個文件而頭痛。更有些特洛依木馬的作者因爲不清楚系統的自啓動方式而使自己的木馬輕鬆被別人發現……