很多監視軟體要求軟體能夠在系統重新啟動後不用使用者去點擊表徵圖啟動項目,而是直接能夠啟動運行,方法是寫註冊表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鍵運行,但兩者都在處理“啟動”檔案夾之前。
有時候人們往往會為了一個程式的啟動而頭痛,因為一些使用者往往不知道那些檔案是如何啟動的。所以經常會有些沒用的東西掛在系統上佔用資源。有時候也會有人因為不知道如何啟動某個檔案而頭痛。更有些特洛依木馬的作者因為不清楚系統的自啟動方式而使自己的木馬輕鬆被別人發現……