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, , MAX_PATH);
if (GetModuleFileName(NULL, szFilePath, MAX_PATH))
{
HKEY hKey;
CString strRegPath = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegPath, , KEY_SET_VALUE, &hKey) == ERROR_SUCCESS)
{
RegSetValueEx(hKey, _T("AutoRun"), , REG_SZ, (LPBYTE)szFilePath, (lstrlen(szFilePath) + )*sizeof(TCHAR));
}
RegCloseKey(hKey);
}
} inline void ReSetAutoRun()
{
HKEY hKey;
CString strRegPath = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegPath, , KEY_SET_VALUE, &hKey) == ERROR_SUCCESS)
{
RegDeleteValue(hKey, _T("AutoRun"));
}
RegCloseKey(hKey);
}

5、  双击OK按钮,写入代码:

  CString strFilePath;
TCHAR szFilePath[MAX_PATH];
memset(szFilePath, , 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(""), strFilePath);
}
else
{
SetAutoRun();
WritePrivateProfileString(_T("AutoRun"), _T("AutoRun"), _T(""), strFilePath);
}
}

6、  编译运行:

PS:

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

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

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

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

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

VC++ 设置软件开机自启动的方法的更多相关文章

  1. 转:CentOS设置程序开机自启动的方法

    转自:http://www.centos.bz/2011/09/centos-setup-process-startup-boot/ 1.把启动程序的命令添加到/etc/rc.d/rc.local文件 ...

  2. CentOS设置程序开机自启动的方法

    转自:http://www.centos.bz/2011/09/centos-setup-process-startup-boot/ 在CentOS系统下,主要有两种方法设置自己安装的程序开机启动. ...

  3. linux设置tomcat开机自启动

    本文假设jdk环境安装成功,如何安装JDK请参考这个链接: http://www.cnblogs.com/yoyotl/p/5395208.html 1. 下载apache的安装包,例如本例下载了ap ...

  4. Ubuntu16设置Redis开机自启动

    Ubuntu16设置Redis开机自启动   Ubuntu16设置Redis开机自启动 设置条件: -Ubuntu16.04 -Redis-4.0.11 在redis目录下找到  utils/redi ...

  5. tomcat设置为开机自启动

    第一步:设置环境变量(在java环境变量配置完成的情况下) 计算机右键——>属性——>高级系统设置——>环境变量——>在用户变量中心新建CATALINA_HOME变量 编辑pa ...

  6. CentOS7中设置Tomcat8开机自启动

    CentOS7中设置Tomcat8开机自启动 本文介绍了在centos7中配置tomcat的开机自启动的一些操作步骤,仅供参考. 环境是CentOS 7 ,jdk版本是1.8.0_191,tomcat ...

  7. Linux下设置svn开机自启动

    方式一:centos 7 设置svn开机自启动 使用新的systemctl 服务命令  (笔者成功验证过,该方式可行) [root@iZjvr37lpviqbkZ init.d]# vi /lib/s ...

  8. Centos7系统下编写systemd脚本设置redis开机自启动

    今天想设置redis开机自启动,我觉得这样子比较好,但是在网上找了很长时间发现大家都是基于chkconfig的写法来设置的,并不能由systemd进程来统一管理,所以这里我自己编写了一个,希望大家可以 ...

  9. centos7.x设置nginx开机自启动

    设置nginx开机自启动(centos7.x) 第一步:进入到/lib/systemd/system/目录 [root@iz2z init.d]# cd /lib/systemd/system/ 第二 ...

随机推荐

  1. Appium简单测试用例

    工程目录如下: 封装初始化androiddriver 方法 import org.openqa.selenium.remote.DesiredCapabilities; import java.io. ...

  2. C#计算一段程序运行时间的三种方法

    第一种方法利用System.DateTime.Now: static void SubTest() { DateTime beforDT = System.DateTime.Now; //耗时巨大的代 ...

  3. pureftp在centos下与MySQL搭配使用

    概述 pure-ftpd是linux下的一个ftp服务端,据说安全性较高.我在centos6下用yum安装pure-ftpd,并配置了通过MySQL进行用户的增删改查,以及对应到apache的web目 ...

  4. 在thinkphp中js文件添加路径

    JS文件不认识__URL__这些tp独特的链接,所以要自己重新定义url,才能使用这些路径. 在js对于的模板上定义url 然后在js文件中引用

  5. js事件(Event)知识整理

    事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下   鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...

  6. nuget包重装

    Update-Package -Reinstall Update-Package -reinstall -ProjectName Cardin.HeartCare.Service.ChatServic ...

  7. 分享公司Entity与DTO之间数据拷贝的方法

    主题 最早以前自学java web的时候,数据库查询出来一个Entity对象(CMP对象).就直接传给前台展示了.并没有用到DTO对象,开始并没有觉得有什么不好...后来发现还是需要一些DTO对象来专 ...

  8. Vue.js 整理笔记

    以前我们用Jquery进行dom的操作,虽然熟悉后开发效率很高,但是如果多个控件的相互操作多的情况下,还是会乱.相比之下,Vue的使用更加清晰,通过虚拟dom将数据绑定,而且组件化和路由的帮助下,让整 ...

  9. jQuery学习过程问题笔记

    1.  jQuery中,$('selector').click(function(){})和用bind绑定:$('selector').bind('click',function(){})有什么区别? ...

  10. linux shell -常用脚本

    题记:来源与网络和自己工作中总结.有些脚本片段,函数经常使用. 1.判断登录用户 1.1脚本 [devtac@test_1 shell]$ vi check_user.sh #! /bin/sh ec ...