zoukankan      html  css  js  c++  java
  • 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文件夹中的文件也显示正确

  • 相关阅读:
    python 矩阵转置
    go
    Go-GRPC 初体验
    SpringMVC笔记——Spring+MyBatis组合开发简单实例
    MyBatis笔记——EhCache二级缓存
    MyBatis笔记——Mapper动态代理
    MyBatis笔记——初次环境配置
    Spring笔记——配置Hibernate框架事务
    Hibernate笔记——关联关系配置(一对多、一对一和多对多)
    Mysql笔记——触发器简单实例
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6214455.html
Copyright © 2011-2022 走看看