还剩47页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
家庭电脑监控系统的设计与分析中文摘要随着计算机应用的普及,越来越多的家庭拥有了计算机极大的提高了生活质量,然而在计算机给家庭带来诸多方便的同时也给不少家庭带来了不安全的负面因数,如孩子上网浏览不健康的网页,痴迷于游戏等等美国已经有很大一部分家庭对孩子用电脑进行了监控,我们设计的家庭电脑监控是专门为家长了解与控制孩子使用电脑的系统我们的系统在运行时可以隐藏界面跟进程,在不知不觉中监控你的电脑运行情况,能够监控文件的使用记录、屏幕图像记录、访问网页记录、QQ聊天记录、MSN聊天记录、飞行聊天记录、网站屏蔽、电脑运行时间控制等能够帮助你了解孩子的思想状况并及时的帮助与教育孩子关键字钩子(hook)、线程、动态库、注册表TheanalysisanddesignofhomecomputermonitoringsystemAbstractWiththepopularizationofthecomputerapplicationmoreandmorefamilieshavecomputerwhichgreatlyimprovethequalityofifethecomputerbringssomuchconveniencetofamilybutatthesametimeitbringstheinsafeandnegativefatorsforexamplethechildbrowsestheunhealthywebsiteontheinternetaddicttogameandsoon.inAmericamostofthefamiliesalreadyhavewatchandcontrolwhenthechildrenusethecomputerthecomputerwatchandcontrolsystemisasystemwedesignonlyforparentstowatchandcontrolwhenthechildrenusethecomputer.oursystemcanhiditsinterfaceandcoursewhenitisrunningwatchandcontrolyourcomputerundiscovereditcanwatchandcontroltherecordofthefileusingtherecordofthescreentherecordofvisitedwebsitethechatrecordofQQthechatrecordofMSNthechatrecordoffetionwebsiteshieldandtheruntimeofthecomputerandsoon.itcanhelpyoutoknowyourchildrensthoughtandtohelpandeducateyourchildrenontime.KeyWord:Hook;Thread;Regedit;DynamicLinkLibrar毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果据我所知,除文中已经注明引用的内容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意作者签名日期毕业论文(设计)授权使用说明本论文(设计)作者完全了解**学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图书馆被查阅学校可以公布论文(设计)的全部或部分内容保密的论文(设计)在解密后适用本规定 作者签名指导教师签名日期日期注意事项
1.设计(论文)的内容包括1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)
2.论文字数要求理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于
1.2万字
3.附件包括任务书、开题报告、外文译文、译文原文(复印件)
4.文字、图表要求1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序1)设计(论文)2)附件按照任务书、开题报告、外文译文、译文原文(复印件)次序装订3)其它目录TOC\o1-2\h\z\u中文摘要1Abstract2目录11前言
11.1选题背景
11.2选题意义
11.3家庭电脑监控的发展趋势22家庭电脑监控系统的相关开发技术
32.1VisualC++
6.0技术
32.2注册表技术
52.3动态库dll技术
62.
4.钩子(hook)技术
72.5多线程技术133家庭电脑监控系统的总体设计
163.1需求分析
163.2模块总体设计174家庭电脑监控的详细设计
194.1主界面的设计与实现
194.2数据库设计与实现
254.3文件使用记录的设计与实现
284.4电脑运行时间的设计与实现
304.5隐藏进程的详细设计与实现
334.6电脑启动时自动运行家庭电脑监控的详细设计与实现39致谢42参考文献431前言家庭电脑监控系统是一个针对所有电脑拥有者的的一个应用系统,特别是一些希望了解孩子用电脑干了什么事情的系统下面介绍一下课题的选题背景、选题意义及未来的发展趋势
1.1选题背景随着计算机的应用普及,千千万万的家庭在娱乐,通讯,学习,工作等各方面实现了前所未有的信息化,极大地提高了生活质量然而,在计算机给人们带来诸多方便的同时,您是否感受到它也给您的家庭带来了许多“不安全”的负面因素?当您离家在外的时候,您是否担心孩子过多时间玩电脑游戏而耽误了学习?互联网内容繁杂,您是否担心孩子上网浏览到不健康内容的网页?您是否担心您的丈夫(妻子)在家中使用qqmsn聊天时而不小心堕入“外遇”的陷井?您是否希望当您不在家时,您的电脑的使用情况尽在掌握之中?专家研究结果显示,在美国12岁到17岁的青少年群体中,有87%的人会上网,其中又有87%,数量约为1900万的青少年在家里上网调查显示,美国联网家庭使用网络过滤或监控软件的比例从2000年12月的41%提高到了2004年的54%,对网络采取监控行动的家庭从700万增加为1200万户由此说明,在美国,多数家庭对青少年上网实施监控措施
1.2选题意义二十一世纪是网络的世纪,网络将以无与伦比的技术优势抢占时代制高点随着全球范围的信息数字化、网络化进程的加快,一个崭新的网络社会已呼之欲出当社会发展的主流是以internet基础时,人们利用计算机网络构成的环境作为活动与交流、商贸活动的场所,这样的人群集合就可称之为网络社会networksociety日益扩大的网民人数,日益增多的网站,日新月异的网络技术,日渐形成的网络虚拟社会,网络的发展为人类的道德进步提供了难得的机遇,同时也对青少年的道德发展产生巨大的影响,负面的、消极的道德影响和由此产生的网络道德失范行为也不可避免任何新生事物的产生和发展总有积极的一面和消极一面美与丑、传统与现代等思想意识,价格观念无不混杂于网络文化中事实让我们不得不开始重新审视网络,我们不免开始怀疑网络到底带给我们什么?我们天真好奇的孩子到底在网上干了些什么?我们应该如何对待、如何选择这人类现代文明进程中的新课题在许多中小学生倾情于网上聊天和游戏,上网聊天和游戏对他们来说是轻车熟路但除了网络聊天游戏外,许多学生竟连电脑的基本操作都不会作为高科技的电脑技术,充当信息时代排头兵的网络,在孩子心目中只简单地异化为一种新的游戏工具因此使用一套系统全面掌握和控制孩子的电脑使用情况是非常有必要的我们精心设计的家庭电脑监控系统,为您解决后顾之忧!可以助你更好地全面掌握和控制孩子的电脑使用情况;如果发现孩子过份沉溺于游戏、聊天或不良网站,你可以充分利用软件中的管理功能进行管理,同时能了解记录他(她)的QQ以及MSN等的即时聊天情况!解他(她)的思想动态!如有不良倾向,及早制止!!!可以了解到他(她)访问的网站和屏幕上的内容,便于你日后查看
1.3家庭电脑监控的发展趋势调查显示,美国联网家庭使用网络过滤或监控软件的比例从2000年12月的41%提高到了2007年的54%,对网络采取监控行动的家庭从700万增`1e:a 5%4oH 加为1200万户由此说明,在美国,多数家庭对青少年上网实施监控措施随着中国计算机的应用普及,千千万万的家庭在娱乐,通讯,学习,工作等各方面实现了前所未有的信息化,极大地提高了生活质量尤其是在竞E\8AA3` ;^@N+争日益激烈的今天,许多父母为了不让孩子输在起跑线上,在“电脑是二十一世纪必备的三大技能之一“的预言的压力下,以及电化教学的要6jr8h}J `Zb-@+zU 求下,竞相为孩子配备了电脑但是,在计算机给人们带来诸多方便的同时,您是否感受到它也给您的家庭尤其是孩子教育带来了许多“不安nGhJ. pxvclD全”的负面因素?当您离家在外的时候,您是否担心孩子过多时间玩电脑游戏而耽误了学习?互联网内容繁杂,您是否担心孩子上网浏览到不_v@I|5‑X BL3~kPYP# 健康内容的网页?回答肯定是肯定的对电脑进程监控肯定是一种趋势,家庭电脑监控系统在中国会得到普遍的应用2家庭电脑监控系统的相关开发技术家庭电脑监控系统的设计与开发,整个过程应用到许多技术例如VisualC++
6.
0、access数据库、动态链接库(dll)技术、钩子hook技术、多线程技术等,下面介绍一下该系统实现过程中应用到的相关理论与相关开发技术
2.1VisualC++
6.0技术MicrosoftVisualC++
6.0是MicrosoftVisualStudio
6.0家族成员之一,是VisualC++的最新版本它不仅适用于Windows编程,还为网络编程、数据库编程提供了强大的支持与VisualC++
5.0相比,VisualC++
6.0具有更快的编译速度、更加友好的编辑界面和更加强大的数据库支持功能MFC(MicrosoftFoundationClasses)库是Microsoft为利用VC++开发的Windows应用程序而提供的应用程序框架,在这个框架的支持下,对于不同的应用程序,编程的主要任务是填写各自特殊部分的代码MFC由130多个类组成,这些类封装了两千多个API函数MFC类库主要包括两组类,一组是一般用途类,它提供了许多有用的抽象类,如Cfile类代表文件;CWnd类是窗口类,这些在Windows的编程中有重要的作用另一类是OLE类(ObjectLinkingandEmbeding――对象的链接与嵌入),这一类专门用于OLE的编程使用MFC的有点有很多,主要的优点如下●用类编程,将代码和数据封装在类中,大大减少了编程的复杂性以前用Windows的API编程,需要清楚2000多个函数的使用,而用MFC,只需要了解100多个类的用法,在这些类中,常用的只有几十个●通过继承实现了基本的代码重用在MFC中定义了大量类,所以可以在编程中通过继承来使用这些类另外,MFC还在这些类中定义了大量的虚函数,也就是说,对于这些函数,不但可以保存它们原有的特性,还可以对这些函数进行修改,使之具有新的特性●提供大量的工具方便编程在MFC中,可以使用AppWizard(应用程序向导)来建立应用程序的框架,可以使用ClassWizard(类向导)在程序中添加类、变量以及在程序中传递各种信息用ControWizard(控件向导)创建可以在Windows中注册的控件等●借助设计良好的类库通常可以减少代码规模使用MFC库,编程者只需注意应用程序与通用的Windows程序不同的一些特性,而几乎所有的应用程序与Windows之间的接口(包括窗口的建立与显示)都是由程序框架来实现的VisualC++
6.0不仅是一个重要的C++编译器,它还提供了一套综合的开发工具和良好的可视化编程环境――MicrosoftVisualStudio
6.0在这个环境下,用户可以简便快捷的对C和C++应用程序进行各种操作,例如建立、打开、保存、编辑、编译、链接和调试等VisualC++的集成开发环境由窗口、工具栏、菜单、工具条、路径和其他一些有用的部分构成由于VisualC++
6.0提供了文本敏感菜单,工具条和快捷键等,因此开发平台能够在菜单内容等方面自动对你当前所做的工作做出反映除了VisualC++
6.0提供的标准开发平台,用户可以定制VisualC++的集成开发环境,以适应具体的需要,如创建新的工具栏、菜单条和快捷键等等项目(Project)是一些相互关联的源文件的集合,这些源文件被编译、链接后,组合在一起就形成可执行的Windows应用程序项目工作区则代表了特定的项目的集合,每个工作区可以包含一个或多个项目通过Project菜单中的InsertProjectintoWorkspasce选项,用户可以将不同的项目加入到同一个项目工作区中当用户需要同时调试多个项目时,将多个项目放入一个项目工作区可以极大地减少工作难度每个项目都是由一个项目文件(.dsp)和一组源文件组成项目工作区文件负责组织源文件,保存项目描述内容和设置信息用户利用项目工作区窗口可以很方便地组织文件、管理项目和更改项目设置在项目工作区地底端,有三个制表符,分别是ClassView、ResourceView和FileView这三个制表符分别对应着ClassView、ResourceView和FileView面板通过单击这些制表符,用户可以得到项目工作区中所有项目的以不同形式组织的视图充分利用项目工作区,可以大大地提高编程人员地编程效率VisualC++
6.0开发平台提供了一个集成地源代码编辑器来管理、编辑和打印源文件与早期地编辑器不同,源代码编辑器能够处理地资源范围已经不仅仅局限于各种文本文件,它还能够对各种资源进行处理,包括对话框资源、菜单资源、加速键资源、版本资源、图形资源等源代码编辑器根据用户输入的内容,自动识别资源类型,调用相应的编辑器进行处理VisualC++
6.0编程包括可视化编程和代码编程两个部分在可视化编程部分,VisualC++
6.0提供了强大的软件开发工具Wizard用户根据需要利用Wizard提供的交互式图形界面,建立应用程序的框架结构而在代码编程方面,利用VisualStudio
6.0提供的源代码编辑器,在已建立的程序框架基础上添加源代码,以实现应用程序的具体功能在VisualC++
6.0提供的为数众多的向导中,MFCAppWizard和ClassWizard是最常用的两个向导MFC类库是Microsoft公司用C++语言开发的一套基础类库,是VisualC++的重要组成部分MFCAppWizard采用交互式界面,一步一步地引导用户建立基于MFC类库地Windows应用程序地基本框架,包括完整地源文件和资源文件用户无需编写一行程序就可以建立一个标准Windows风格地应用程序MFCAppWizard有两种版本一种帮助用户建立一个可执行地文件;另一种帮助用户建立一个动态链接库文件ClassWizard就好像是编程人员地助手以往当用户定义了一个类、编写消息处理函数时,都必须编写大量的代码有了ClassWizard,事情就变得简单了目前,只有基于MFC类库地应用程序才能使用ClassWizard由于Windows程序是一种基于事件驱动的编程模式,因此,用户的应用程序所做的工作必须随着Windows消息的变化来进行通过使用ClassWizard对话框中的消息映射项,用户可以将消息映射成各种程序所能接受、处理的信息因此在编写应用程序时,ClassWizard能给用户工作带来极大的方便
2.2注册表技术提到注册表,各位软件开发人员或多或少都有所了解,因为在好多的软件中,可能需要涉及到这方面的编程,如系统启动自动加载程序运行,修改相关的设置,提高服务器的抗拒绝服务攻击能力等,所以说,对注册表的编程操作是我们各位软件进开发行人员必须了解的知识,我们没有理由不深入了解它WINDOWS系列操作系统的注册数据库Registry是系统中非常重要的组成部分,在Win32 API中有一组注册表操作函数来处理这些问题,其一般的读写过程如下
1、使用RegOpenKeyEx或RegCreateKeyEx函数打开或创建一个键;
2、如果上一步成功,使用RegQueryValueEx读取子键的值,使用RegSetValueEx设置子键值,使用RegEnumKey获得所有子键,使用RegDeleteKey删除一个键;
3、完成操作后使用RegCloseKey关闭键
2.3动态库dll技术自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库DLL中的函数和数据,实际上Windows操作系统中几乎所有的内容都由DLL以一种或另外一种形式代表着,例如显示的字体和图标存储在GDIDLL中、显示Windows桌面和处理用户的输入所需要的代码被存储在一个UserDLL中、Windows编程所需要的大量的API函数也被包含在KernelDLL中DLL是建立在客户/服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个DLL(服务器)上并由一个或多个客户导出而使用,这些客户可以是应用程序或者是其它的DLL使用动态链接库的优点 最主要的一点是多个应用程序、甚至是不同语言编写的应用程序可以共享一个DLL文件,真正实现了资源共享,大大缩小了应用程序的执行代码,更加有效的利用了内存; 使用DLL的另一个优点是DLL文件作为一个单独的程序模块,封装性、独立性好,在软件需要升级的时候开发人员只需要修改相应的DLL文件就可以了,而且,当DLL中的函数改变后,只要不是参数的改变程序代码并不需要重新编译这在编程时十分有用,大大提高了软件开发和维护的效率静态库函数和数据被编译进一个二进制文件(通常扩展名为LIB),在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把他们和应用程序的其他模块组合起来创建最终的可执行文件(EXE文件)这个过程称为静态链接,此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行动态库在使用动态库的时候,往往提供两个文件,一个引入库和一个DLL,引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据,在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候再去加载DLL,访问DLL中导出的函数动态链接库加载的2种方式
1.隐式链接:隐式链接就是在程序开始执行时就将DLL文件加载到应用程序当中实现隐式链接很容易,只要将导入函数关键字_declspecdllimport函数名等写到应用程序相应的头文件中就可以了注意要先将Dll.dll和Dll.lib拷贝到当前工程所在的目录下面,
2.显式链接:显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适首先要将DLL文件拷贝到工程所在的目录或Windows系统目录下使用显式链接应用程序编译时不需要使用相应的Lib文件主要是三个函数的调用LoadLibrary//加载动态链接库文件;GetProcAddress//获取导入到应用程序中的函数指针FreeLibraryhDLL//卸载动态链接库文件
2.
4.钩子(hook)技术钩子程序是在内存中可以不断的在内存中拦截你要控制设备的消息并且可以对该消息进行处理过滤钩子是WINDOWS留给我们的后门,比如你想控制键盘,在DOS时代很简单通过INT即可,而WINDOWS时代不允许我们直接操作硬件;由于WINDOWS是消息驱动,所以我们可以拦截键盘消息以达到控制键盘的目的但是控制自己进程的消息固然很简单,要控制所有进程消息要利用钩子了将钩子函数放在DLL中,所有的有关键盘的消息都必须经过钩子函数过滤,这样你就可以为所欲为了WINDOWS下的钩子程序就像DOS下的TSR内存驻留程序一样用来截获WINDOWS下的特定的消息进行相应的处理比如可以截获键盘输入的消息,来获得键盘输入的信息等钩子程序可以通过API调用来驻留和脱钩钩子的类型 一.按事件分类,有如下的几种常用类型
(1)键盘钩子和低级键盘钩子可以监视各种键盘消息
(2)鼠标钩子和低级鼠标钩子可以监视各种鼠标消息
(3)外壳钩子可以监视各种Shell事件消息比如启动和关闭应用程序
(4)日志钩子可以记录从系统消息队列中取出的各种事件消息
(5)窗口过程钩子监视所有从系统消息队列发往目标窗口的消息 此外,还有一些特定事件的钩子提供给我们使用,不一一列举下面描述常用的Hook类型
1、WH_CALLWNDPROC和WH_CALLWNDPROCRETHooksWH_CALLWNDPROC和WH_CALLWNDPROCRETHooks使你可以监视发送到窗口过程的消息系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROCHook子程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRETHook子程WH_CALLWNDPROCRETHook传递指针到CWPRETSTRUCT结构,再传递到Hook子程CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数
2、WH_CBTHook在以下事件之前,系统都会调用WH_CBTHook子程,这些事件包括
1.激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;
2.完成系统指令;
3.来自系统消息队列中的移动鼠标,键盘事件;
4.设置输入焦点事件;
5.同步系统消息队列事件Hook子程的返回值确定系统是否允许或者防止这些操作中的一个
3、WH_DEBUGHook在系统调用系统中与其他Hook关联的Hook子程之前,系统会调用WH_DEBUGHook子程你可以使用这个Hook来决定是否允许系统调用与其他Hook关联的Hook子程
4、WH_FOREGROUNDIDLEHook当应用程序的前台线程处于空闲状态时,可以使用WH_FOREGROUNDIDLEHook执行低优先级的任务当应用程序的前台线程大概要变成空闲状态时,系统就会调用WH_FOREGROUNDIDLEHook子程
5、WH_GETMESSAGEHook应用程序使用WH_GETMESSAGEHook来监视从GetMessageorPeekMessage函数返回的消息你可以使用WH_GETMESSAGEHook去监视鼠标和键盘输入,以及其他发送到消息队列中的消息
6、WH_JOURNALPLAYBACKHookWH_JOURNALPLAYBACKHook使应用程序可以插入消息到系统消息队列可以使用这个Hook回放通过使用WH_JOURNALRECORDHook记录下来的连续的鼠标和键盘事件只要WH_JOURNALPLAYBACKHook已经安装,正常的鼠标和键盘事件就是无效的WH_JOURNALPLAYBACKHook是全局Hook,它不能象线程特定Hook一样使用WH_JOURNALPLAYBACKHook返回超时值,这个值告诉系统在处理来自回放Hook当前消息之前需要等待多长时间(毫秒)这就使Hook可以控制实时事件的回放WH_JOURNALPLAYBACK是system-widelocalhooks,它们不会被注射到任何行程位址空间(估计按键精灵是用这个hook做的)
7、WH_JOURNALRECORDHookWH_JOURNALRECORDHook用来监视和记录输入事件典型的,可以使用这个Hook记录连续的鼠标和键盘事件,然后通过使用WH_JOURNALPLAYBACKHook来回放WH_JOURNALRECORDHook是全局Hook,它不能象线程特定Hook一样使用WH_JOURNALRECORD是system-widelocalhooks,它们不会被注射到任何行程位址空间
8、WH_KEYBOARDHook在应用程序中,WH_KEYBOARDHook用来监视WM_KEYDOWNandWM_KEYUP消息,这些消息通过GetMessageorPeekMessagefunction返回可以使用这个Hook来监视输入到消息队列中的键盘消息
9、WH_KEYBOARD_LLHookWH_KEYBOARD_LLHook监视输入到线程消息队列中的键盘消息
10、WH_MOUSEHookWH_MOUSEHook监视从GetMessage或者PeekMessage函数返回的鼠标消息使用这个Hook监视输入到消息队列中的鼠标消息
11、WH_MOUSE_LLHookWH_MOUSE_LLHook监视输入到线程消息队列中的鼠标消息
12、WH_MSGFILTER和WH_SYSMSGFILTERHooksWH_MSGFILTER和WH_SYSMSGFILTERHooks使我们可以监视菜单,滚动条,消息框,对话框消息并且发现用户使用ALT+TABorALT+ESC组合键切换窗口WH_MSGFILTERHook只能监视传递到菜单,滚动条,消息框的消息,以及传递到通过安装了Hook子程的应用程序建立的对话框的消息WH_SYSMSGFILTERHook监视所有应用程序消息WH_MSGFILTER和WH_SYSMSGFILTERHooks使我们可以在模式循环期间过滤消息,这等价于在主消息循环中过滤消息通过调用CallMsgFilterfunction可以直接的调用WH_MSGFILTERHook通过使用这个函数,应用程序能够在模式循环期间使用相同的代码去过滤消息,如同在主消息循环里一样
13、WH_SHELLHook外壳应用程序可以使用WH_SHELLHook去接收重要的通知当外壳应用程序是激活的并且当顶层窗口建立或者销毁时,系统调用WH_SHELLHook子程WH_SHELL共有5钟情况
1.只要有个top-level、unowned窗口被产生、起作用、或是被摧毁;
2.当Taskbar需要重画某个按钮;
3.当系统需要显示关于Taskbar的一个程序的最小化形式;
4.当目前的键盘布局状态改变;
5.当使用者按Ctrl+Esc去执行TaskManager(或相同级别的程序)按照惯例,外壳应用程序都不接收WH_SHELL消息所以,在应用程序能够接收WH_SHELL消息之前,应用程序必须调用SystemParametersInfofunction注册它自己以上是13种常用的hook类型! 2.按使用范围分类,主要有线程钩子和系统钩子
(1)线程钩子监视指定线程的事件消息
(2)系统钩子监视系统中的所有线程的事件消息因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库DLL中这是系统钩子和线程钩子很大的不同之处 几点需要说明的地方
(1)如果对于同一事件(如鼠标消息)既安装了线程钩子又安装了系统钩子,那么系统会自动先调用线程钩子,然后调用系统钩子
(2)对同一事件消息可安装多个钩子处理过程,这些钩子处理过程形成了钩子链当前钩子处理结束后应把钩子信息传递给下一个钩子函数而且最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权
(3)钩子特别是系统钩子会消耗消息处理时间,降低系统性能只有在必要的时候才安装钩子,在使用完毕后要及时卸载编写钩子程序 编写钩子程序的步骤分为三步定义钩子函数、安装钩子和卸载钩子 1.定义钩子函数 钩子函数是一种特殊的回调函数钩子监视的特定事件发生后,系统会调用钩子函数进行处理不同事件的钩子函数的形式是各不相同的下面以鼠标钩子函数举例说明钩子函数的原型LRESULTCALLBACKHookProcintnCodeWPARAMwParamLPARAMlParam参数wParam和lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等nCode包含有关消息本身的信息,比如是否从消息队列中移出我们先在钩子函数中实现自定义的功能,然后调用函数CallNextHookEx.把钩子信息传递给钩子链的下一个钩子函数CallNextHookEx.的原型如下LRESULTCallNextHookExHHOOKhhkintnCodeWPARAMwParamLPARAMlParam参数hhk是钩子句柄nCode、wParam和lParam是钩子函数当然也可以通过直接返回TRUE来丢弃该消息,就阻止了该消息的传递2.安装钩子 在程序初始化的时候,调用函数SetWindowsHookEx安装钩子其函数原型为HHOOKSetWindowsHookExintidHookHOOKPROClpfnINSTANCEhModDWORDdwThreadId参数idHook表示钩子类型,它是和钩子函数类型一一对应的比如,WH_KEYBOARD表示安装的是键盘钩子,WH_MOUSE表示是鼠标钩子等等 Lpfn是钩子函数的地址 HMod是钩子函数所在的实例的句柄对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄 dwThreadId指定钩子所监视的线程的线程号对于全局钩子,该参数为NULL SetWindowsHookEx返回所安装的钩子句柄 3.卸载钩子 当不再使用钩子时,必须及时卸载简单地调用函数BOOLUnhookWindowsHookExHHOOKhhk即可 值得注意的是线程钩子和系统钩子的钩子函数的位置有很大的差别线程钩子一般在当前线程或者当前线程派生的线程内,而系统钩子必须放在独立的动态链接库中,实现起来要麻烦一些
2.5多线程技术线程介绍一个进程通常定义为程序的一个实例在Win32中,进程占据4GB的地址空间与它们在MS-DOS和16位Windows操作系统中不同,Win32进程是没有活力的这就是说,一个Win32进程并不执行什么指令,它只是占据着4GB的地址空间,此空间中有应用程序EXE文件的代码和数据EXE需要的任意DLL也将它们的代码和数据装入到进程的地址空间除了地址空间,进程还占有某些资源,比如文件、动态内存分配和线程当进程终止时,在它生命期中创建的各种资源将被清除 但是进程是没有活力的,它只是一个静态的概念为了让进程完成一些工作,进程必须至少占有一个线程,所以线程是描述进程内的执行,正是线程负责执行包含在进程的地址空间中的代码实际上,单个进程可以包含几个线程,它们可以同时执行进程的地址空间中的代码为了做到这一点,每个线程有自己的一组CPU寄存器和堆栈 每个进程至少有一个线程在执行其地址空间中的代码,如果没有线程执行进程地址空间中的代码,进程也就没有继续存在的理由,系统将自动清除进程及其地址空间为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮转方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行创建一个Win32进程时,它的第一个线程称为主线程,它由系统自动生成,然后可由这个主线程生成额外的线程,这些线程,又可生成更多的线程多线程编程技术基础
1、编写线程函数 所有线程必须从一个指定的函数开始执行,该函数称为线程函数,它必须具有下列原型DWORDWINAPIYourThreadFuncLPVOIDlpvThreadParm; 该函数输入一个LPVOID型的参数,可以是一个DWORD型的整数,也可以是一个指向一个缓冲区的指针,返回一个DWORD型的值象WinMain函数一样,这个函数并不由操作系统调用,操作系统调用包含在KERNEL
32.DLL中的非C运行时的一个内部函数,如StartOfThread,然后由StartOfThread函数建立起一个异常处理框架后,调用我们的函数
2、创建一个线程 一个进程的主线程是由操作系统自动生成,如果你要让一个主线程创建额外的线程,你可以调用来CreateThread完成 HANDLECreateThreadLPSECURITY_ATTRIBUTESlpsaDWORDcbstackLPTHREAD_START_ROUTINElpStartAddrLPVOIDlpvThreadParmDWORDfdwCreateLPDWORDlpIDThread; 其中lpsa参数为一个指向SECURITY_ATTRIBUTES结构的指针如果想让对象为缺省安全属性的话,可以传一个NULL,如果想让任一个子进程都可继承一个该线程对象句柄,必须指定一个SECURITY_ATTRIBUTES结构,其中bInheritHandle成员初始化为TRUE参数cbstack表示线程为自己所用堆栈分配的地址空间大小,0表示采用系统缺省值 参数lpStartAddr用来表示新线程开始执行时代码所在函数的地址,即为线程函数lpvThreadParm为传入线程函数的参数,fdwCreate参数指定控制线程创建的附加标志,可以取两种值如果该参数为0,线程就会立即开始执行,如果该参数为CREATE_SUSPENDED,则系统产生线程后,初始化CPU,登记CONTEXT结构的成员,准备好执行该线程函数中的第一条指令,但并不马上执行,而是挂起该线程最后一个参数lpIDThread是一个DWORD类型地址,返回赋给该新线程的ID值
3、终止线程 如果某线程调用了ExitThread函数,就可以终止自己VOIDExitThreadUINTfuExitCode; 这个函数为调用该函数的线程设置了退出码fuExitCode后,就终止该线程调用TerminateThread函数亦可终止线程BOOLTerminateThreadHANDLEhThreadDWORDdwExitCode; 该函数用来结束由hThread参数指定的线程,并把dwExitCode设成该线程的退出码当某个线程不在响应时,我们可以用其他线程调用该函数来终止这个不响应的线程3家庭电脑监控系统的总体设计在对整个开发系统进行全面分析调查的基础上,制定出应用软件的总体设计,这对建立一个应用软件说是必须的,也是全面展开开发工作的重要基础系统总体设计包括需求分析、模块总体设计等
3.1需求分析随着计算机的应用普及,千千万万的家庭在娱乐,通讯,学习,工作等各方面实现了前所未有的信息化,极大地提高了生活质量然而,在计算机给人们带来诸多方便的同时,您是否感受到它也给您的家庭带来了许多“不安全”的负面因素?当您离家在外的时候,您是否担心孩子过多时间玩电脑游戏而耽误了学习?互联网内容繁杂,您是否担心孩子上网浏览到不健康内容的网页?您是否担心您的丈夫(妻子)在家中使用qqmsn聊天时而不小心堕入“外遇”的陷井?您是否希望当您不在家时,您的电脑的使用情况尽在掌握之中?通过跟很多家长的交流与沟通得出来的结论是很有必要开发一个系统对电脑进行监控通过跟很多家长的交流与沟通开发的系统应该实行如下功能
1.监视信息---文件使用记录
2.监视信息---屏幕图象记录
3.监视信息---访问网页记录
4.监视信息---QQ聊天记录
5.监视信息---MSN聊天记录
6.控制设置---网站屏蔽
7.控制设置---隐藏家庭电脑监控系统的运行进程跟窗口
8.控制设置---运行时间控制
9.系统参数设置
10.其他
3.2模块总体设计对于开发网站来说,前期的总体设计规划是必要的,也是必须的,因为它将影响到整个系统的好坏和设计实现的进度,所以,在开发一个系统时,必须先对其进行总体的设计规划,而使之后的工作能朝着预定的方向发展通过上面对网站的整体需求分析,我们可以规划一个简单的家庭电脑监控的总体设计方向图
3.1展示了家庭电脑监控的总体规划图图
3.1总体规划图各个模块的说明如下
1、上网监控能记录孩子所上的网站,及内容并具有网页过滤功能,可禁止孩子上特定的网站,如游戏网站,色情网站等等
2、文件监控本软件运行时,对电脑中的文件作了任何操作,例如新建,删除,打开,修改等操作,本软件都能一一记录并且保存下来,保存的记录已日期分类,方便您查询.
3、禁止程序运行可自行设定禁用孩子计算机的指定的程序,如、游戏等等4聊天内容监视可监视包括QQ、Msn、飞信等聊天工具的聊天内容,不管使用者是否选择保存聊天记录都可以记录聊天内容,可以了解孩子跟什么人联系,了解孩子的心理状态5屏幕记录本软件运行您可以配置截屏策略,让您看到所有您想看到的电脑使用当时的画面6电脑使用时间设置可以设置孩子可以用电脑的时间如果不在设定的时间内电脑自动关机7隐藏监控系统家庭电脑监控运行时隐藏起来不要让使用者知道,在任务管理器的进程里也看不到,使用者根本不知道这个软件在运行,只有拥有者可以通过密码唤出软件4家庭电脑监控的详细设计详细设计的工作包括处理过程、代码设计和界面设计三个部分即根据总体设计的每个功能模块的要求,利用相应的开发工具设计出应用系统的过程这个系统是两个人共同完成的在这里只给出系统的主框架跟我自己负责的那部分的模块的功能设计描述、界面设计,和核心代码
4.1主界面的设计与实现这个系统主要是针对电脑普通用户的所以界面不能够太复杂,越简单越好,我们通过CGfxPopupMenu、CGfxOutBarCtrl、CGfxGroupEdit三个类实现了类似QQ那样滚动分栏的界面,我想用电脑的人基本都对QQ很熟悉的用起我们的系统来也肯定很容易系统的主界面截图这个是系统运行时候出现的主窗口,在这个窗口中点击左边的按钮就可以显示相应的监控到的记录点击列表框中的信息会在下面显示点击的那天记录的详细信息这个窗口可以对控制进行一些灵活的控制如时间段的设置网址屏蔽设置等等点击左边的按钮右便会出现相应的窗口这个窗口可以对系统对系统进行设置数据的清理退出系统等等下面是实现界面的主要代码:voidCSysMinitorDlg::InitBar{//创建抽屉菜单控件DWORDdwf=CGfxOutBarCtrl::fDragItems|CGfxOutBarCtrl::fEditGroups|CGfxOutBarCtrl::fEditItems|CGfxOutBarCtrl::fRemoveGroups|CGfxOutBarCtrl::fRemoveItems|CGfxOutBarCtrl::fAddGroups|CGfxOutBarCtrl::fAnimation|CGfxOutBarCtrl::fSelHighlight;CRectrc;GetClientRectrc;rc.right=rc.left+150;wndBar.CreateWS_CHILD|WS_VISIBLErcthisIDC_LST_MENUdwf;wndBar.SetOwnerthis;//创建并设置大小图标链表CSysMinitorApp*pApp=CSysMinitorApp*AfxGetApp;imaLarge.Create3232TRUE1414;imaLarge.AddpApp-LoadIconIDI_ICON_QQ;imaLarge.AddpApp-LoadIconIDI_ICON_MSN;imaLarge.AddpApp-LoadIconIDI_ICON_FETION;imaLarge.AddpApp-LoadIconIDI_ICON_FILE;imaLarge.AddpApp-LoadIconIDI_ICON_WEB;imaLarge.AddpApp-LoadIconIDI_ICON_WEBSET;imaLarge.AddpApp-LoadIconIDI_ICON_FILESET;imaLarge.AddpApp-LoadIconIDI_ICON_FILESAFE;imaLarge.AddpApp-LoadIconIDI_ICON_TIMESET;imaLarge.AddpApp-LoadIconIDI_ICON_SYSSET;imaLarge.AddpApp-LoadIconIDI_ICON_DATA;imaLarge.AddpApp-LoadIconIDI_ICON_ABOUT;imaLarge.AddpApp-LoadIconIDI_ICON_QUIT;wndBar.SetImageListimaLargeCGfxOutBarCtrl::fLargeIcon;wndBar.SetImageListimaSmallCGfxOutBarCtrl::fSmallIcon;charszData
[50];CStringstrKeyName;//创建3个抽屉wndBar.SetAnimationTickCount20;wndBar.SetAnimSelHighlight200;forinti=0;i3;i++{strKeyName.FormatFolder%di;::GetPrivateProfileStringFolderstrKeyNameszData50szFileName;wndBar.AddFolderszDatai;}//给第一个抽屉加图标按钮fori=0;i5;i++{strKeyName.FormatItem0%di;::GetPrivateProfileStringItemstrKeyNameszData50szFileName;wndBar.InsertItem0iszDatai0;}//给第二个抽屉加图标按钮fori=0;i4;i++{strKeyName.FormatItem1%di;::GetPrivateProfileStringItemstrKeyNameszData50szFileName;wndBar.InsertItem1iszDatai+50;}//给第三个抽屉加图标按钮fori=0;i4;i++{strKeyName.FormatItem2%di;::GetPrivateProfileStringItemstrKeyNameszData50szFileName;wndBar.InsertItem2iszDatai+90;}//打开第一个抽屉wndBar.SetSelFolder0;}
4.2数据库设计与实现在这个系统中数据库不是很重要的,设计起来也挺简单的下面我简单介绍一下我们的数据库我们使用使用Microsoft Access数据库,Microsoft Access数据库是一个小型数据库使用起来也没有那么复杂,因为我们这个系统对数据库的要求不高所以我们选择了Microsoft Access数据库在这里我们使用ADO技术进行数据库编程ADOActiveXDataObject是Microsoft数据库应用程序开发的新接口,是建立在OLEDB之上的高层数据库访问技术ADO技术基于COM,具有COM组件的诸多优点,可以用来构造可复用应用框架,被多种语言支持,能够访问关系数据库、非关系数据库及所有的文件系统另外,ADO还支持各种客户/服务器模块与基于Web的应用程序,具有远程数据服务(RDSRemoteDataService)的特性,是远程数据存取的发展方向ADO封装了OLEDB提供的接口,是基于OLEDB模型之上的更高层应用,比起OLEDB提供者,ADO的接口可以使程序员在更高级别上同数据交互,并且保留了MFC/ODBC和DAO的特性ADO技术不仅可以应用于关系数据库,也可以应用于非关系数据库可以用统一的方法对不同的文件系统进行访问,大大简化了程序编制,增加了程序的可移植性另外ADO的对象模型简化了对象的操作,因为它并不依赖于对象之间的相互层次作用大多数情况下可以只关心所要创建和使用的对象,而无需了解其父对象例如,在OLEDB的操作中,必须先建立数据源和数据实用程序之间的连接才能打开一个行集对象,而在ADO中可以直接打开一个记录对象,而无需先建立与数据源的连接下面是我们设计的数据库飞信、MSN、QQ的表是一样的有发送时间、本机账号、对方账号、聊天内容四个属性文件使用记录的表有操作时间、文件标题、操作、文件路径四个属性网页访问记录有访问时间、网页标题、网页地址三个属性下面是我读写数据库的代码voidCADOConn::OnInitADOConn{//初始化OLE/COM库环境::CoInitializeNULL;try{//创建connection对象m_pConnection.CreateInstanceADODB.Connection;//设置连接字符串_bstr_tstrConnect=Provider=Microsoft.Jet.OLEDB.
4.0;DataSource=dt.mdb;//SERVER和UIDPWD的设置根据实际情况来设置m_pConnection-OpenstrConnectadConnectUnspecified;}catch_com_errore{AfxMessageBoxe.Description;}}_RecordsetPtrCADOConn::GetRecordSet_bstr_tbstrSQL{try{ifm_pConnection==NULLOnInitADOConn;m_pRecordset.CreateInstance_uuidofRecordset;HRESULThr=m_pRecordset-OpenbstrSQLm_pConnection.GetInterfacePtradOpenDynamicadLockOptimisticadCmdText;}catch_com_errore{AfxMessageBoxe.Description;}returnm_pRecordset;}BOOLCADOConn::ExecuteSQL_bstr_tbstrSQL{_variant_tRecordsAffected;try{ifm_pConnection==NULLOnInitADOConn;m_pConnection-ExecutebstrSQLNULLadCmdText;returntrue;}catch_com_errore{AfxMessageBoxe.Description;returnfalse;}}
4.3文件使用记录的设计与实现文件使用的监控我们主要是通过线程技术实现的,通过创建一个线程对文件进程监控,能监控文件的增加、删除、修改、重命名下面是文件监控的一个截图关键代码enumACTION{ADDED=1REMOVED=2MODIFIED=3RENAMED=4};voidFileDealACTIONactchar*pszFileName1char*pszFileName2HWNDhwnd{charszContent[MAX_PATH]=;MsgOfFile*pMsgOfFile=newMsgOfFile;switchact{caseADDED:strcpypMsgOfFile-szOperateAdded;break;caseREMOVED:strcpypMsgOfFile-szOperateRemoved;break;caseMODIFIED:strcpypMsgOfFile-szOperateModified;break;caseRENAMED:strcpypMsgOfFile-szOperateRenameas;strcatpMsgOfFile-szOperatepszFileName2;break;}CTimect=CTime::GetCurrentTime;strcpypMsgOfFile-szTimect.Format%Y-%m-%d%H-%M-%S.GetBuffer20;strcpypMsgOfFile-szPathD:\\;strcatpMsgOfFile-szPathpszFileName1;SendMessagehwndMSG_OF_MINITOR3LPARAMpMsgOfFile;deletepMsgOfFile;}DWORDWINAPIFileMinitorThreadLPVOIDlParam{HANDLEhDir=CreateFileD:\\GENERIC_READ|GENERIC_WRITEFILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETENULLOPEN_EXISTINGFILE_FLAG_BACKUP_SEMANTICSNULL;ifINVALID_HANDLE_VALUE==hDirreturnfalse;charbuf[2*sizeofFILE_NOTIFY_INFORMATION+MAX_PATH];FILE_NOTIFY_INFORMATION*pNotify=FILE_NOTIFY_INFORMATION*buf;DWORDBytesReturned;whileg_bStartFileMinitor{}return0;}
4.4电脑运行时间的设计与实现电脑运行时间的监控也是通过多线程技术实现的在这里我们新建了一个CTimeConfDlg类用来监控电脑是否在可以运行的时间段运行如果不是在允许的时间范围内使用电脑电脑会自动关机我创建一个线程获取配置中的数据并跟系统当前时间进行比较来获得电脑是不是在指定的时间段运行并做出相应的反应intCompareTimeCTimeConfDlg*pDlgintnFlag{COleDateTimeoleCurTime;COleDateTimeoleBeginTimeoleFinishTime;switchnFlag{case1:{pDlg-m_dtpBegin
1.GetTimeoleBeginTime;pDlg-m_dtpFinish
1.GetTimeoleFinishTime;break;}case2:{pDlg-m_dtpBegin
1.GetTimeoleBeginTime;pDlg-m_dtpFinish
1.GetTimeoleFinishTime;break;}case3:{pDlg-m_dtpBegin
1.GetTimeoleBeginTime;pDlg-m_dtpFinish
1.GetTimeoleFinishTime;break;}case4:{pDlg-m_dtpBegin
1.GetTimeoleBeginTime;pDlg-m_dtpFinish
1.GetTimeoleFinishTime;break;}}//switcholeBeginTime.SetDateTime200888oleBeginTime.GetHouroleBeginTime.GetMinuteoleBeginTime.GetSecond;oleFinishTime.SetDateTime200888oleFinishTime.GetHouroleFinishTime.GetMinuteoleFinishTime.GetSecond;oleCurTime=COleDateTime::GetCurrentTime;oleCurTime.SetDateTime200888oleCurTime.GetHouroleCurTime.GetMinuteoleCurTime.GetSecond;ifoleCurTime.operatoroleFinishTime||oleCurTime.operatoroleBeginTime{return1;}return0;}
4.5隐藏进程的详细设计与实现使用这个系统的人一般都不愿意让被监控者知道我们在监控他的,所以我们不要让被监控者知道我们在监控他,于是我使用要把监控系统启动时把窗口藏起来,很多电脑使用者会都去任务管理器里看进程看看电脑运行了什么进程,为了不让这些使用者知道运行了家庭电脑监控系统我们把任务管理器里的进程和窗口隐藏起来,通过密码才能把窗口唤出来在这里我们也是用线程技术实现的这里主要是通过把进程变为服务来实现的.下面是隐藏进程跟窗口的核心代码以下是LoadDeviceDriver函数及其调用的函数BOOLCHideProcess::LoadDeviceDriverconstTCHAR*NameconstTCHAR*PathHANDLE*lphDevicePDWORDError{SC_HANDLEschSCManager;BOOLokay;schSCManager=OpenSCManagerNULLNULLSC_MANAGER_ALL_ACCESS;RemoveDriverschSCManagerName;InstallDriverschSCManagerNamePath;StartDriverschSCManagerName;okay=OpenDeviceNamelphDevice;*Error=GetLastError;CloseServiceHandleschSCManager;returnokay;}//LoadDeviceDriver调用函数之一BOOLCHideProcess::RemoveDriverSC_HANDLESchSCManagerLPCTSTRDriverName{SC_HANDLEschService;BOOLret;schService=OpenServiceSchSCManagerDriverNameSERVICE_ALL_ACCESS;ifschService==NULLreturnFALSE;ret=DeleteServiceschService;CloseServiceHandleschService;returnret;}//LoadDeviceDriver调用函数之二BOOLCHideProcess::InstallDriverSC_HANDLESchSCManagerLPCTSTRDriverNameLPCTSTRServiceExe{SC_HANDLEschService;schService=CreateServiceSchSCManager//SCManagerdatabaseDriverName//nameofserviceDriverName//nametodisplaySERVICE_ALL_ACCESS//desiredaccessSERVICE_KERNEL_DRIVER//servicetypeSERVICE_DEMAND_START//starttypeSERVICE_ERROR_NORMAL//errorcontroltypeServiceExe//servicesbinaryNULL//noloadorderinggroupNULL//notagidentifierNULL//nodependenciesNULL//LocalSystemaccountNULL//nopassword;ifschService==NULLreturnFALSE;CloseServiceHandleschService;returnTRUE;}//LoadDeviceDriver调用函数之三BOOLCHideProcess::StartDriverSC_HANDLESchSCManagerLPCTSTRDriverName{SC_HANDLEschService;BOOLret;schService=OpenServiceSchSCManagerDriverNameSERVICE_ALL_ACCESS;ifschService==NULLreturnFALSE;ret=StartServiceschService0NULL||GetLastError==ERROR_SERVICE_ALREADY_RUNNING||GetLastError==ERROR_SERVICE_DISABLED;CloseServiceHandleschService;returnret;}//LoadDeviceDriver调用函数之四BOOLCHideProcess::OpenDeviceLPCTSTRDriverNameHANDLE*lphDevice{TCHARcompleteDeviceName
[64];HANDLEhDevice;ifGetVersion0xFF=5{wsprintfcompleteDeviceNameTEXT\\\\.\\Global\\%sDriverName;}else{wsprintfcompleteDeviceNameTEXT\\\\.\\%sDriverName;}hDevice=CreateFilecompleteDeviceNameGENERIC_READ|GENERIC_WRITE0NULLOPEN_EXISTINGFILE_ATTRIBUTE_NORMALNULL;ifhDevice==HANDLE-1returnFALSE;iflphDevice*lphDevice=hDevice;elseCloseHandlehDevice;returnTRUE;}//这是主调用函数BOOLCHideProcess::InitchardriverPath[]CStringstrPath{strcpym_szPath
[0].szFilterPCHARLPCTSTRstrPath;DWORDerror;UnloadDeviceDriverDEVICE_NAME;if!LoadDeviceDriverDEVICE_NAMEdriverPathhDeviceerror{UnloadDeviceDriverDEVICE_NAME;if!LoadDeviceDriverDEVICE_NAMEdriverPathhDeviceerror{UnloadDeviceDriverDEVICE_NAME;returnFALSE;}}ifhDevice==INVALID_HANDLE_VALUE{returnFALSE;}////////////////////////////////////////////////////////////////////////////UpdateFilterDWORDdwWritten=0;if!DeviceIoControlhDeviceIOCTL_HIDEPROC_HIDEPVOIDm_szPathsizeofPathNULL0dwWrittenNULL{returnFALSE;}StartHide;returnTRUE;}BOOLCHideProcess::StartHide{DWORDdwWritten=0;if!DeviceIoControlhDeviceIOCTL_HIDEPROC_STARTNULL0NULL0dwWrittenNULL{returnFALSE;}returnTRUE;}
4.6电脑启动时自动运行家庭电脑监控的详细设计与实现你可以在系统系统设置那里选择电脑启动时运行,这样的话电脑启动时家庭电脑监控就运行了这里我主要用注册表技术,通过修改注册表来达到系统启动是自动运行家庭电脑监控下面是核心代码voidCSysConfDlg::OnChkAutostart{HKEYsub;charbufname
[200];::GetModuleFileNameNULLbufname200;CStringstr;str.Format%sbufname;CStringskey=Software\\Microsoft\\Windows\\CurrentVersion\\Run;::RegCreateKeyHKEY_LOCAL_MACHINEskeysub;Intncheck=CButton*GetDlgItemIDC_CHK_AUTOSTART-GetCheck;if1==ncheck{::RegSetValueExsubSystemMintorNULLREG_SZconstBYTE*str.GetBuffer0str.GetLength;}else{::RegDeleteValuesubSystemMintor;}WriteStartMinitorValueIDC_CHK_AUTOSTARTAtuoStart;}参考文献
[1] 明日科技.VisualC++程序开发范例宝典[M].北京:人民邮电出版社2007
[2]张力.VisualC++高级编程[M].北京:人民邮电出版社2002
[3]王建华.WINDOWS核心编程[M].北京:机械工业出版社2006
[4]潘爱民王国印.VisualC++技术内幕[M].北京:清华大学出版社1999
[5]侯俊杰侯捷.Win32多线程程序设计[M].湖北:华中科技大学出版社
[6]孙鑫余安萍.VC++深入详解.电子工业出版社[M].北京:电子工社.2006
[7]ScottMeyers.EffectiveC++中文版[M].北京:电子工业出版社.2006
[8]SteveOualline.PracticalC++Programming[M].Australia:OReilly1995
[9]袁丁傅一平.VisualC++精彩实例详解[M].北京:机械工业出版社2003
[10]KarlE.Wiegers.SoftwareRequirementsSecondEdition[M].US:MicrosoftPress2004
[11]SteveMcConnell.CODECOMPLETESecondEdition[M].US:MicrosoftPress.2006
[12]李普曼.C++Primer中文版[M].北京:人民邮电出版社.2006 致谢在毕业设计的过程中,通过家庭电脑监控的设计,我受益匪浅在这段时间里,大学四年所学的知识得到了综合的运用,同时,在刘海林老师的指导下,我也掌握了软件开发的基本方法,了解了当今软件开发的一些新技术在毕业设计的过程中,我得到了刘海林老师的悉心指导,尽管本人在软件开发和论文撰写的过程中也付出了努力,但刘海林老师在总体设计和详细设计中给我提出的许多建议,是我毕业设计能够顺利通过的必要条件之一在此,我对刘海林老师表示诚挚的感谢!最后感谢同学对我的帮助和评委老师对此论文的审阅家庭电脑监控系统MSN聊天记录飞信聊天记录访问网页记录网址屏蔽运行时间控制幕图象像记录行时隐藏监控程序开机自动运行QQ聊天记录。