利用VC++编程实现程序自动启动

2023-10-27

 

摘要:在工作中经常遇到一些程序,当计算机启动时会自动将该程序加载,以实现对计算机的监控等特殊的目的。本文就针对这个问题,阐述了系统加载特定程序的原理和方法,同时利用VC++ 6.0编程实现这种特定的功能的,并对其中的关键代码进行了分析。

工作中经常遇到一些程序,它们在系统启动的过程中,自动打开并运行,以便实现对系统的监控或者病毒的检测等特定的目的,典型的例子就是常用的一些杀毒软件如:KV300及瑞星杀毒软件等。笔者在此,以自己的编程实践为基础,说明这些这些程序自动启动的原理和方法,同时对一些典型程序代码进行分析,以便读者在今后的编程过程中使用。

一、 程序自动启动的原理及方法:
1. 利用WIN.INI文件实现相关程序的自动启动
WIN.INI是系统保存在C:WINDOWS目录下的一个系统初始化文件。系统在起动时会检索该文件中的相关项,以便对系统环境的初始设置。
在该文件中的"[windows]"数据段中,有两个数据项"load="和"run=",它们的作用就是在系统起动之后自动得装入和运行相关的程序。如果我们需要在系统起动之后装入并运行一个程序,只将需要运行文件的全文件名添加在该数据项的后面系统起动后就会自动运行该程序,系统也会进入特定的操作环境中去。
2. 利用注册表实现相关程序的自动启动
系统注册表保存着系统的软件、硬件及其他与系统配置有关的重要信息,一个计算机系统的系统注册表一旦遭到破坏,整个系统将无法运行。
在计算机的系统注册表中的子目录中有一个目录的名称为HKEY_LOCAL_MACHINESoftware MicrosoftWindowsCurrent_VersionRun,如果你想让程序在系统起动的过程中启动该程序,就可以向该目录添加一个子项,具体的过程是在注册表中右击该项,选中其中的"新建"项目,然后选中其中的"串值",建立新的串值后将它的名称改成相应的名称,双击新建的串值,输入新的数值,自动启动程序的过程就设置完成。
二、 利用VC++编程实现程序自动启动的编程实例。
微软公司提供的VC++ 6.0程序开发工具功能非常强大。在VC++ 6.0中同时具有对注册表和*.INI文件操作的函数。笔者经过一段时间的摸索,成功的利用VC++ 6.0开发成功了一个小软件,该软件利用系统自动启动程序的原理,将原来需要的繁琐的手动工作转变成成计算机的自动设置工作,使系统自动启动相关程序的设置工作变的非常简单可靠。
1.程序功能概述:
程序的主界面是对话框,在主界面对话框中有编辑框(EDIT BOX),圆形按钮(RADIO BUTTON)和普通按钮(COMMON BUTTON)组成。操作者通过向编辑框中添加需要自动加载的程序的全文件名(也可以通过浏览按钮来完成),然后通过对两个RADIO BUTTON的选择,进而完成对加载方式的选择(是选用注册表方式还是选者修改WIN.INI文件的方式),最后操作者通过点击"应用"按钮实现程序的自动加载功能,同时系统会提示操作者是否将操作计算机重新启动,以便观察程序的具体功能完成情况。程序在WIN98中调试运行正常。
2.编码说明:
① 浏览按钮的功能代码:
void CAutoloadDlg::OnLiulan()
{
// TODO: Add your control notification handler code here
CFileDialog fileDlg(TRUE,_T("EXE"),_T("*.exe"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(_T("Executable Files (*.exe) |*.exe ||")));//显示打开文件的对话框
if(fileDlg.DoModal()==IDOK)//当操作者选择OK时,程序,取得选择文//件的全路径名(包括文件的路径及文件名称),并将相应的数值传输给相//关的控件变量。
{
m_filename=fileDlg.GetPathName();//m_filename是EDIT BOX控件的相应的变量。
UpdateData(FALSE);//向将变量中的数值传输给控件显示出来。
}
}
② 应用按钮的功能代码:
void CAutoloadDlg::OnOK()
{
// TODO: Add extra validation here
LPCTSTR title;
UpdateData(TRUE);
if(m_title.IsEmpty())//如果操作者没有填写要设置项的标题,程序显示对话框,提示操作者进行相关的填写。
{
MessageBox(_T("Please input the title name"));
return;
}
title=m_title;
if(m_filename.IsEmpty())//如果操作者没有选择要设置的程序的全路径文//件名,程序显示对话框,提示操作者进行相关的选择。
{
MessageBox(_T("Please input the programe file name"));
return;
}
if(IsDlgButtonChecked(IDC_RADIO1))//如果操作者选择注册表方式,程序修改系统的注册表。
{
HKEY hKey;
LPCTSTR data_Set="SoftwareMicrosoftWindowsCurrentVersionRun";//设置注册表中相关的路径
Longret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_WRITE,&hKey));//打开注册表中的相应项
if(ret0!=ERROR_SUCCESS)
{
MessageBox("错误0");
}
int length=m_filename.GetLength()+1;//将控件中的内容进行转换,以达到注册表修改函数的参数调用需求。
for(int i=0;i{
if(m_filename==92)
length=length+1;
}
DWORD cbData=length;
LPBYTE lpb=new BYTE[length];
int j=0;
for(i=0;i{
if(m_filename==92)
{
lpb[j]=92;
j++;
lpb[j]=92;
j++;
}
else
{
lpb[j]=m_filename;
j++;
}
}
lpb[j]=0;
long ret1=(::RegSetValueEx(hKey,title,NULL,REG_SZ,lpb,cbData));//将相关的信息写入注册表。
if(ret1!=ERROR_SUCCESS)//判断系统的相关注册是否成功?
{
MessageBox("错误1");
}
delete lpb;
::RegCloseKey(hKey);//关闭注册表中的相应的项
}
if(IsDlgButtonChecked(IDC_RADIO2))//如果操作者选择用修改WIN.INI文件的方式
{
LPCTSTR filename;
filename=m_filename;
WritePrivateProfileString(_T("windows"),_T("load"),filename,_T("c:windowswin.ini"));
WritePrivateProfileString(_T("windows"),_T("run"),filename,_T("c:windowswin.ini"));
}
yzdlg.DoModal();//显示对话框,提示操作者是否需要重新启动计算机,以便验证程序的功能。
CDialog::OnOK();
}
③ 重新启动按钮的功能代码:
void yanzheng::OnOK()
{
OSVERSIONINFO OsVerInfo;//保存系统版本信息的数据结构
OsVerInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&OsVerInfo);//取得系统的版本信息
if(OsVerInfo.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
{
ExitWindowsEx(EWX_REBOOT,0);//重新启动计算机
}
CDialog::OnOK();
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用VC++编程实现程序自动启动 的相关文章

随机推荐

  • 自动化特征工程(featuretools)

    一 特征是什么 在机器学习中 特征可以描述为解释现象发生的一组特点 当这些特点转换为一些可测量的形式时 它们就称作特征 二 特征工程 有这么一句话在业界广泛流传 数据和特征决定了机器学习的上限 而模型和算法只是逼近这个上限而已 特征工程可以
  • React 回调函数传默认值和自定义参数

    利用箭头函数 e为默认参数 arg为自定义参数 onTouchStart e gt this touchS e arg
  • SpringBoot用注解实现redis缓存

    1 入口类加注解 EnableCaching EnableRetry 重试 SpringBootApplication MapperScan cn my dao EnableCaching 开启redis缓存 EnableSchedulin
  • Qt之自定义信号

    widget h如下 ifndef WIDGET H define WIDGET H include
  • 认真分析mmap:是什么 为什么 怎么用

    阅读目录 mmap基础概念 mmap内存映射原理 mmap和常规文件操作的区别 mmap优点总结 mmap相关函数 mmap使用细节 回到顶部 mmap基础概念 mmap是一种内存映射文件的方法 即将一个文件或者其它对象映射到进程的地址空间
  • uni-app 支持 app端, h5端,微信小程序端 图片转换文件格式 和 base64

    uni app 支持 app端 h5端 微信小程序端 图片转换文件格式 和 base64 下方是插件市场的地址app端 h5端 微信小程序端 图片转换文件格式 和 base64 DCloud 插件市场 https ext dcloud ne
  • JAVA - 大批量集合数据多线程处理

    原因 最近写项目多时候遇到一个这样的问题 Excel批量导入表格 数据量较大 处理时间较长 然后小编想到了可以用多线程处理 例 导入失败集合 List
  • mysql修改字符集_修改mysql默认字符集的两种方法详细解析

    1 最简单的修改方法 就是修改mysql的my ini文件中的字符集键值 如 default character set utf8 character set server utf8 修改完后 重启mysql的服务 service mysq
  • WARNING: Ignoring invalid distribution

    WARNING Ignoring invalid distribution 目录地址 根据提示到指定目录地址中删除 开头的文件 一般是由于下载过程中异常终止导致的
  • R及R包的安裝、更新及版本查询

    1R包的安裝 1 安裝来自CRAN的R包 install packages openxlsx 2 手动从网上搜索到下载 zip 或 tar gz 文件到本地 再手动安装 download the source file download f
  • c++基础

    1 打印三角形 求和 99乘法表 判断质数 if 0 include
  • 论文精读:Ansor: Generating High-Performance Tensor Programs for Deep Learning

    文章目录 1 Abstract 2 Introduction 3 Background 4 Design Overview 5 Program Sampling 5 1 Sketch Generation 5 2 Random Annota
  • 最近成了三等奖专业户

    最近连续收到三等奖证书若干 最欣慰的是蓝桥杯省赛scratch三等奖 小妞水平也就那样 她从市赛的优秀奖 四等奖 到省赛的三等奖 居然还进步了 老母亲知足了 scratch主要是因为我自己水平有限 没办法高效辅导她 有可能就止步于此 NOC
  • 数据结构期末复习题(线性表 链表)

    目录 线性表 1 用已有数组创建顺序表 2 用键盘输入的方式创建顺序表 3 输出顺序表各元素 4 在顺序表某一个位置插入一个元素 5 在顺序表某一个位置删除一个元素 6 查找顺序表上某个位置的元素并输出 7 查找顺序表上某个数的位置并输出
  • File I/O总结

    一 File类的常用方法 1 boolean exists 判断文件或目录是否存在 2 boolean isFile 判断是否是文件 3boolean isDirectory 判断是否是目录 4 String getPath 返回此对象表示
  • solidity经典案例----拍卖

    Solidity经典合约案例 拍卖 1 案例分析 2 具体的代码 pragma solidity 0 6 1 contract aution demo address payable public seller 卖方 address pay
  • 110道python面试笔试题汇总

    看到一篇python 基础面试练习题文章 有必要面试前做一下 转至 https blog csdn net weixin 40907382 article details 80621513 1 一行代码实现1 100之和 利用sum 函数求
  • Less-7(文件读写操作)

    文章目录 OUTFILE注入 实战 1 关卡分析 2 过关斩将 2 1 secure file priv 2 2 注入过程 load file的使用 SQLmap OUTFILE注入 在前面的学习中 我们知道了sql注入中的盲注和双注入是个
  • CentOS 代理 proxy设置方法

    说明 为什么说是http代理 其实这个还不能说是全称走代理 罪名写的区别就是ICMP协议这个设置就无效 只能说是90 的应用都可以使用这个设置来实现代理访问 只有个别不行 比如一些软件根本不走http协议的 那么此种方法绝对不行 下面是讲解
  • 利用VC++编程实现程序自动启动

    摘要 在工作中经常遇到一些程序 当计算机启动时会自动将该程序加载 以实现对计算机的监控等特殊的目的 本文就针对这个问题 阐述了系统加载特定程序的原理和方法 同时利用VC 6 0编程实现这种特定的功能的 并对其中的关键代码进行了分析 工作中经