动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.水滴石穿C语言之内存使用.
.透视“语言大战”:C++呼唤敏捷实.
.CIH v1.4源程序.
.理解 C++ Builder&nbs.
.明确C++风格的类型转换的用法.
.高质量C++/C编程指南 --&nb.
.查看系统的cpp (C PreProcessor).
.C语言中的指针和内存泄漏.
.八皇后问题的非递归实现.
.Matlab与C语言程序的应用编程接口.
.CRichEditCtrl实现MSN/QQ动画表情.
.文本模式模仿磁盘扫描外观.
.雕虫小计—颜色渐变的进度条.
.C++ 通过WIN32 API 获取逻辑磁盘.
.JOSEPH环.
.C语言数组排序小结.
.任意形状的窗体.
.通过键盘操作的,想进行c图形化编.
.C++实现用掌上电脑遥控电视.
.TCP/IP网络重复型服务器通信软件.

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

发表日期:2008-3-8 |


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

一、 程序自动启动的原理及方法:

1. 利用WIN.INI文件实现相关程序的自动启动

WIN.INI是系统保存在C:\WINDOWS\目录下的一个系统初始化文件。系统在起动时会检索该文件中的相关项,以便对系统环境的初始设置。

在该文件中的"[windows]"数据段中,有两个数据项"load="和"run=",它们的作用就是在系统起动之后自动得装入和运行相关的程序。假如我们需要在系统起动之后装入并运行一个程序,只将需要运行文件的全文件名添加在该数据项的后面系统起动后就会自动运行该程序,系统也会进入特定的操作环境中去。

2. 利用注册表实现相关程序的自动启动



系统注册表保存着系统的软件、硬件及其他与系统配置有关的重要信息,一个计算机系统的系统注册表一旦遭到破坏,整个系统将无法运行。

在计算机的系统注册表中的子目录中有一个目录的名称为HKEY_LOCAL_MACHINE\Software \Microsoft\Windows\Current_Version\Run,假如你想让程序在系统起动的过程中启动该程序,就可以向该目录添加一个子项,具体的过程是在注册表中右击该项,选中其中的"新建"项目,然后选中其中的"串值",建立新的串值后将它的名称改成相应的名称,双击新建的串值,输入新的数值,自动启动程序的过程就设置完成。

二、 利用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_HIDEREADONLYOFN_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="Software\\Microsoft\\Windows\\CurrentVersion\\Run";//设置注册表中相关的路径

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[i]==92)

length=length+1;

}

DWord cbData=length;

LPBYTE lpb=new BYTE[length];

int j=0;

for(i=0;i {

if(m_filename[i]==92)

{

lpb[j]=92;

j++;

lpb[j]=92;

j++;

}

else

{

lpb[j]=m_filename[i];

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:\\windows\\win.ini"));

WritePrivateProfileString(_T("windows"),_T("run"),filename,_T("c:\\windows\\win.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();
}
上一篇:C++中函数指针数组的使用 人气:442
下一篇:gdb基础 人气:339
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-21 Nucleus v3.33 多国语言版
2008-8-21 HDWiki v4.0 bulid 080821 UTF-8
2008-8-21 明科在线客服系统 v6.0
2008-8-21 KesionCMS v5.0.2 正式版 utf-8
2008-8-21 KesionEshop v5.0.2 正式版 utf-8
2008-8-21 HDWiki v4.0 bulid 080821 GBK
2008-8-21 新文互动酷站展示系统 v1.5
2008-8-21 Punbb v1.2.20 多国语言版
2008-8-21 QQ头像网 beta
2008-8-16 iLaba Player(小喇叭播放器) v2.
2008-8-16 DoubleClickFix 鼠标双击修正工具
2008-8-16 CrystalCPUID 4.15.2.451
2008-8-16 VeryCD 电驴(easyMule) 1.0.4 Bu
2008-8-16 uTorrent 1.8 Build 11813 - Sta
2008-8-16 比特精灵(BitSpirit) v3.3.2.287
2008-8-16 StayInTune音叉 v1.0 破解版
2008-8-16 iChing《周易》汉化补丁 v1.0
2008-8-16 Starmap星空图v1.0汉化破解版
  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号