VC++ 设置软件开机自启动的方法

摘要:
0概述软件开机自启动是比较常用的做法,设置方法也有好几种。1使用者模式在“开始菜单”的所有程序中有个“启动”文件夹,可以将需要设置为开机启动的应用程序放在这个文件夹中。但是,这样做存在不足:“启动”文件夹路径在每台电脑有可能是不同的,没法做到一劳永逸。
0 概述

软件开机自启动是比较常用的做法,设置方法也有好几种。

1 使用者模式

在“开始菜单”的所有程序中有个“启动”文件夹,可以将需要设置为开机启动的应用程序放在这个文件夹中。但是,这样做存在不足:“启动”文件夹路径在每台电脑有可能是不同的,没法做到一劳永逸。

VC++ 设置软件开机自启动的方法第1张

同时,如果要禁止程序开机启动,可将“启动”文件夹中对应的程序文件移除,也可以“Win+R”输入“msconfig”进行手动设置:

VC++ 设置软件开机自启动的方法第2张

2 开发者模式

作为开发人员,当然写注册表是最好的方法:

1、 新建一个基于对话框的MFC应用程序AutoRun;

2、 添加一个Check Box,ID设置为IDC_CHECK_AUTORUN,文本“开机自启动~”;

3、 在AutoRunDlg.h中添加私有成员变量:int m_nCheakState;

4、 在AutoRunDlg.cpp开始加入代码:

inline voidSetAutoRun()
{
       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 voidReSetAutoRun()
{
      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、 编译运行:

VC++ 设置软件开机自启动的方法第3张

PS:

1、 设置开机自启动后,我未能在SOFTWARE\Microsoft\Windows\CurrentVersion\Run下找到我设置的注册表键值,重新启动后生效了~

2、 Debug目录下生成的文件,任务栏右击显示“TOD<文件说明>”

VC++ 设置软件开机自启动的方法第4张

版本信息中FileDescription已做过更改,但是不起作用,很纳闷~

将Debug文件夹中的文件移动到其它目录,显示正确

编译的Release文件夹中的文件也显示正确

免责声明:文章转载自《VC++ 设置软件开机自启动的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【VS开发】#pragma pack(push,1)与#pragma pack(1)的区别jenkins基础、手动、自动代码上线下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Core Dump

什么是在接收到某些特定信号后终止的核心转储程序?在终止过程中,将生成一个核心文件。核心文件包含程序终止时的内存状态。此过程称为coredump。默认情况下,内核在coredump期间生成的核心文件与程序放在同一目录中,文件名固定为core。通过修改内核参数,我们可以指定内核生成的coredump文件的文件名。应该注意,内核中还有一个与coredump相关的设...

mysql修改字段防止锁表

步骤1:修改大表、addcolumn或dropcolumn的字段,操作完成后将锁定该表。此时,查询ok、insert和update将等待锁定。...

libffi

Thisislibffi.info,由libffi.texi生产的bymakeinfo版本5.1。本手册适用于libffi,一个可移植的外国函数接口库。版权所有(C)200820102011redhat,股份有限公司。许可授予复制、分发...

SQL 2008维护计划不执行的问题

平台环境;首先,安装了WINDOWS 2008,但没有升级到AD。安装了sql2008之后,AD被升级。无法确定所有者WWW-4410C397505Administrator是否具有服务器访问权限(原因:无法获取有关WindowsNT组/用户“WWW-440C397505Administrator”的信息,错误代码为0x534。[SQLSTATE42000]...

docker-compose启动容器后执行脚本或命令不退出 | 运行内部程序

好在,docker还有个特别之处,我们可以通过dockerbuild读取到Dockerfile中的指令后,在构建新镜像再起容器的时候,可以直接执行脚本文件运行容器内部应用程序,同时不退出容器。在dockerbuild新镜像后,同样docker-composeup-d启动容器服务,查看容器状态docker-composeps,进入容器并查看进程:事实证明,确实...

C#使用FFMPEG推流,并且获取流保存在本地,随时取媒体进行播放!

最近,基于C#的拖缆的发展并不理想。最后,经过不懈的努力,我取得了一些成绩。这是一张便条;本文重点介绍如何将ffmpeg用于简单的流式传输。如果没有官方文档WithFilter.WithField,简单的代码行似乎很难。拉动();以上是流和获取流的核心代码,保存在本地=TargetType。Live){thrownewApplicationException...