VC++修改注册表使应用程序实现开机自动启动

时间:2022-06-01 17:57:23
      很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册Software\\Microsoft\\Windows\\CurrentVersion\\Run。
参考程序可以见下:(查找程序目录的执行文件,存在则进行添加注册表操作)
//实用代码一

int CClientDlg::SetAutoRun(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+"这里加上你要查找的执行文件名称";   

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键运行,但两者都在处理“启动”文件夹之前。

      有时候人们往往会为了一个程序的启动而头痛,因为一些用户往往不知道那些文件是如何启动的。所以经常会有些没用的东西挂在系统上占用资源。有时候也会有人因为不知道如何启动某个文件而头痛。更有些特洛依木马的作者因为不清楚系统的自启动方式而使自己的木马轻松被别人发现……

      Windows的自启动方式其实有许多方式。除了一些常见的启动方式之外,还有一些非常隐蔽的可用来启动文件的方式。本文总结如下,虽然不是全部,但我想应该会对大家有所帮助。文章全部以系统默认的状态为准,以供研究。其中(English)代表英文操作系统,(Chinese)代表中文操作系统。本文没加说明指的全为中文Windows98操作系统。警告: 文中提及的一些操作可能会涉及到系统的稳定性。例如如果不正确地使用注册表编辑器可以导致可能重新安装系统这样严重的问题。微软也不能保证因不正常使用注册表编辑器而造成的结果可以被解决。笔者不对使用后果负责,请根据自己的情况使用。

Windows的自启动方式:

一.自启动目录:

1.第一自启动目录:

默认路径位于:

C:windowsstart menuprogramsstartup(English)

C:windowsstart menuprograms启动(Chinese)

这是最基本、最常用的Windows启动方式,主要用于启动一些应用软件的自启动项目,如Office的快捷菜单。一般用户希望启动时所要启动的文件也可以通过这里启动,只需把所需文件或其快捷方式放入文件夹中即可。

对应的注册表位置:

[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders]

Startup=\"%Directory%\"

[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders]

Startup=\"%Directory%\"

其中“%Directory%”为启动文件夹位置。

 

英文默认为: C:windowsstart menuprogramsstartup

中文默认为: C:windowsstart menuprograms启动

在开始菜单的“启动”文件夹是可更改的,如果用户更改了启动文件夹,则以上注册表的键值均会改变为相应的名称。

值得注意的是:开始菜单的“启动”文件夹中的内容虽然在默认的状态下可以被用户看得一清二楚。但通过改动还是可以达到相当隐蔽地启动的目的的。