当前位置:文档之家› (最新版)家庭电脑监控系统的分析与设计毕业设计

(最新版)家庭电脑监控系统的分析与设计毕业设计

家庭电脑监控系统的设计与分析

中文摘要

随着计算机应用的普及,越来越多的家庭拥有了计算机极大的提高了生活质量,然而在计算机给家庭带来诸多方便的同时也给不少家庭带来了不安全的负面因数,如孩子上网浏览不健康的网页,痴迷于游戏等等。美国已经有很大一部分家庭对孩子用电脑进行了监控,我们设计的家庭电脑监控是专门为家长了解与控制孩子使用电脑的系统。我们的系统在运行时可以隐藏界面跟进程,在不知不觉中监控你的电脑运行情况,能够监控文件的使用记录、屏幕图像记录、访问网页记录、QQ聊天记录、MSN聊天记录、飞行聊天记录、网站屏蔽、电脑运行时间控制等。能够帮助你了解孩子的思想状况并及时的帮助与教育孩子。

关键字:钩子(of of the computer application, more and more families the internet, addict to game and so on. in America, most of the families already the children use the computer ,the computer watch and control system is a system we design only for parents to watch and control when the children use the computer. our system can it is running, watch and control your computer undiscovered, it can watch and control the record of the file using, the record of the screen, the record of visited website, the chat record of QQ, the chat record of MSN, the chat record of fetion, website shield, and the run time of the computer and so on. it can on time.

KeyWord: Hook;Thread; Regedit;Dynamic Link Librar

毕业论文(设计)原创性声明

本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。据我所知,除文中已经注明引用的内容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。

作者签名:日期:

毕业论文(设计)授权使用说明

本论文(设计)作者完全了解**学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版。有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图书馆被查阅。学校可以公布论文(设计)的全部或部分内容。保密的论文(设计)在解密后适用本规定。

作者签名:指导教师签名:

日期:日期:

注意事项

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)其它

目录

Classes)库是Microsoft为利用VC++开发的Windows应用程序而提供的应用程序框架,在这个框架的支持下,对于不同的应用程序,编程的主要任务是填写各自特殊部分的代码。MFC由130多个类组成,这些类封装了两千多个API函数。MFC类库主要包括两组类,一组是一般用途类,它提供了许多有用的抽象类,如Cfile类代表文件;CWnd类是窗口类,这些在Windows的编程中有重要的作用。另一类是OLE类(Object Linking and Embeding――对象的链接与嵌入),这一类专门用于OLE的编程。

使用MFC的有点有很多,主要的优点如下:

● 用类编程,将代码和数据封装在类中,大大减少了编程的复杂性。以前用Windows的API编程,需要清楚2000多个函数的使用,而用MFC,只需要了解100多个类的用法,在这些类中,常用的只有几十个。

● 通过继承实现了基本的代码重用。在MFC中定义了大量类,所以可以在编程中通过继承来使用这些类。另外,MFC还在这些类中定义了大量的虚函数,也就是说,对于这些函数,不但可以保存它们原有的特性,还可以对这些函数进行修改,使之具有新的特性。

● 提供大量的工具方便编程。在MFC中,可以使用AppWizard(应用程序向导)来建立应用程序的框架,可以使用ClassWizard(类向导)在程序中添加类、变量以及在程序中传递各种信息。用ControWizard(控件向导)创建可以在Windows中注册的控件等。

● 借助设计良好的类库通常可以减少代码规模。

使用MFC库,编程者只需注意应用程序与通用的Windows程序不同的一些特性,而几乎所有的应用程序与Windows之间的接口(包括窗口的建立与显示)都是由程序框架来实现的。

Visual C++6.0 不仅是一个重要的C++编译器,它还提供了一套综合的开发工具和良好的可视化编程环境――Microsoft Visual Studio 6.0 。在这个环境下,用户可以简便快捷的对 C 和C++应用程序进行各种操作,例如建立、打开、保存、编辑、编译、链接和调试等。

Visual C++的集成开发环境由窗口、工具栏、菜单、工具条、路径和其

他一些有用的部分构成。由于Visual C++6.0提供了文本敏感菜单,工具条和快捷键等,因此开发平台能够在菜单内容等方面自动对你当前所做的工作做出反映。除了Visual C++6.0提供的标准开发平台,用户可以定制Visual C++的集成开发环境,以适应具体的需要,如创建新的工具栏、菜单条和快捷键等等。

项目(Project)是一些相互关联的源文件的集合,这些源文件被编译、链接后,组合在一起就形成可执行的Windows应用程序。项目工作区则代表了特定的项目的集合,每个工作区可以包含一个或多个项目。通过Project菜单中的Insert Project into Workspasce选项,用户可以将不同的项目加入到同一个项目工作区中。当用户需要同时调试多个项目时,将多个项目放入一个项目工作区可以极大地减少工作难度。

每个项目都是由一个项目文件(.dsp)和一组源文件组成。项目工作区文件负责组织源文件,保存项目描述内容和设置信息。用户利用项目工作区窗口可以很方便地组织文件、管理项目和更改项目设置。

在项目工作区地底端,有三个制表符,分别是ClassView、ResourceView 和FileView。这三个制表符分别对应着ClassView、ResourceView和FileView 面板。通过单击这些制表符,用户可以得到项目工作区中所有项目的以不同形式组织的视图。充分利用项目工作区,可以大大地提高编程人员地编程效率。

Visual C++6.0开发平台提供了一个集成地源代码编辑器来管理、编辑和打印源文件。与早期地编辑器不同,源代码编辑器能够处理地资源范围已经不仅仅局限于各种文本文件,它还能够对各种资源进行处理,包括对话框资源、菜单资源、加速键资源、版本资源、图形资源等。源代码编辑器根据用户输入的内容,自动识别资源类型,调用相应的编辑器进行处理。

Visual C++6.0编程包括可视化编程和代码编程两个部分。在可视化编程部分,Visual C++6.0提供了强大的软件开发工具Wizard。用户根据需要利用Wizard提供的交互式图形界面,建立应用程序的框架结构。而在代码编程方面,利用Visual Studio 6.0提供的源代码编辑器,在已建立的程序框架基础上添加源代码,以实现应用程序的具体功能。在Visual C++6.0提供的为数众多的向导中,MFC AppWizard和ClassWizard是最常用的两个向导。

MFC类库是Microsoft公司用C++语言开发的一套基础类库,是Visual C++的重要组成部分。MFC AppWizard采用交互式界面,一步一步地引导用户建立基于MFC类库地Windows应用程序地基本框架,包括完整地源文件和资源文件。用户无需编写一行程序就可以建立一个标准Windows风格地应用程序。MFC AppWizard有两种版本:一种帮助用户建立一个可执行地文件;另一种帮助用户建立一个动态链接库文件。

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以一种或另外一种形式代表着,例如显示的字体和图标存储在GDI DLL中、显示Windows桌面和处理用户的输入所需要的代码被存储在一个User DLL中、Windows编程所需要的大量的API函数也被包含在Kernel DLL中。

DLL是建立在客户服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个DLL(服务器)上并由一个或多个客户导出而使用,这些客户可以是应用程序或者是其它的DLL。

使用动态链接库的优点:

最主要的一点是多个应用程序、甚至是不同语言编写的应用程序可以共享一个DLL文件,真正实现了资源"共享",大大缩小了应用程序的执行代码,更加有效的利用了内存;

使用DLL的另一个优点是DLL文件作为一个单独的程序模块,封装性、独立性好,在软件需要升级的时候开发人员只需要修改相应的DLL文件就可以了,而且,当DLL中的函数改变后,只要不是参数的改变,程序代码并不需要重新编译。这在编程时十分有用,大大提高了软件开发和维护的效率。

静态库:

函数和数据被编译进一个二进制文件(通常扩展名为LIB),在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把他们和应用程序的其他模块组合起来创建最终的可执行文件(EXE文件)。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。

动态库:

在使用动态库的时候,往往提供两个文件,一个引入库和一个DLL,引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据,在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候再去加载DLL,访问DLL中导出的函数

动态链接库加载的2种方式

1.隐式链接:隐式链接就是在程序开始执行时就将DLL文件加载到应用程序当中。实现隐式链接很容易,只要将导入函数关键字_declspec(dllimport)函数名等写到应用程序相应的头文件中就可以了。

注意:要先将Dll.dll和Dll.lib拷贝到当前工程所在的目录下面,

2.显式链接:显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。

首先要将DLL文件拷贝到工程所在的目录或Windows系统目录下。使用显式链接应用程序编译时不需要使用相应的Lib文件。

主要是三个函数的调用

LoadLibrary加载动态链接库文件;

GetProcAddress获取导入到应用程序中的函数指针

FreeLibrary(, INSTANCE 、飞信等聊天工具的聊天内容,不管使用者是否选择保存聊天记录都可以记录聊天内容,可以了解孩子跟什么人联系,

了解孩子的心理状态

5 屏幕记录:本软件运行您可以配置截屏策略,让您看到所有您想看到的

电脑使用当时的画面

6 电脑使用时间设置:可以设置孩子可以用电脑的时间如果不在设定的时

间内电脑自动关机。

7 隐藏监控系统:家庭电脑监控运行时隐藏起来不要让使用者知道,在任

务管理器的进程里也看不到,使用者根本不知道这个软件在运行,只有

拥有者可以通过密码唤出软件。

4 家庭电脑监控的详细设计

详细设计的工作包括处理过程、代码设计和界面设计三个部分。即根据总体设计的每个功能模块的要求,利用相应的开发工具设计出应用系统的过程。这个系统是两个人共同完成的在这里只给出系统的主框架跟我自己负责的那部分的模块的功能设计描述、界面设计,和核心代码。

4.1 主界面的设计与实现

这个系统主要是针对电脑普通用户的所以界面不能够太复杂,越简单越好,我们通过CGfxPopupMenu、CGfxOutBarCtrl、CGfxGroupEdit三个类实现了类似QQ那样滚动分栏的界面,我想用电脑的人基本都对QQ很熟悉的用起我们的系统来也肯定很容易。

系统的主界面截图:

这个是系统运行时候出现的主窗口,在这个窗口中点击左边的按钮就可以显示相应的监控到的记录。点击列表框中的信息会在下面显示点击的那天记录的详细信息。

等点击左边的按钮右便会出现相应的窗口。

这个窗口可以对系统对系统进行设置数据的清理退出系统等等

下面是实现界面的主要代码:

void CSysMinitorDlg::InitBar()

{

创建抽屉菜单控件

DWORD dwf = CGfxOutBarCtrl::fDragItems|CGfxOutBarCtrl::fEditGroups

|CGfxOutBarCtrl::fEditItems |

CGfxOutBarCtrl::fRemoveGroups

|CGfxOutBarCtrl::fRemoveItems | CGfxOutBarCtrl::fAddGroups

|CGfxOutBarCtrl::fAnimation | CGfxOutBarCtrl::fSelHighlight;

CRect rc;

GetClientRect(&rc);

rc.right=rc.left+150;

wndBar.Create(WS_CHILD|WS_VISIBLE, rc, this,IDC_LST_MENU, dwf);

wndBar.SetOwner(this);

创建并设置大小图标链表

CSysMinitorApp* pApp=(CSysMinitorApp*)AfxGetApp();

imaLarge.Create(32,32,TRUE,14,14);

imaLarge.Add(pApp->LoadIcon(IDI_ICON_QQ));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_MSN));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_FETION));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_FILE));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_WEB));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_WEBSET));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_FILESET));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_FILESAFE));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_TIMESET));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_SYSSET));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_DATA));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_ABOUT));

imaLarge.Add(pApp->LoadIcon(IDI_ICON_QUIT));

wndBar.SetImageList(&imaLarge, CGfxOutBarCtrl::fLargeIcon);

wndBar.SetImageList(&imaSmall, CGfxOutBarCtrl::fSmallIcon);

char szData[50];

CString strKeyName;

创建3个抽屉

wndBar.SetAnimationTickCount(20);

wndBar.SetAnimSelHighlight(200);

for(int i=0;i<3;i++)

{

strKeyName.Format("Folder%d",i);

::GetPrivateProfileString("Folder",strKeyName," ",szData,50,szFileName);

wndBar.AddFolder(szData, i);

}

给第一个抽屉加图标按钮

for(i=0;i<5;i++)

{

strKeyName.Format("Item0%d",i);

::GetPrivateProfileString("Item",strKeyName," ",szData,50,szFileName);

wndBar.InsertItem(0, i, szData, i, 0);

}

给第二个抽屉加图标按钮

for(i=0;i<4;i++)

{

strKeyName.Format("Item1%d",i);

::GetPrivateProfileString("Item",strKeyName," ",szData,50,szFileName);

wndBar.InsertItem(1, i, szData, i+5, 0);

}

给第三个抽屉加图标按钮

for(i=0;i<4;i++)

{

strKeyName.Format("Item2%d",i);

::GetPrivateProfileString("Item",strKeyName,"

",szData,50,szFileName);

wndBar.InsertItem(2, i, szData, i+9, 0);

}

打开第一个抽屉

wndBar.SetSelFolder(0);

}

4.2 数据库设计与实现

在这个系统中数据库不是很重要的,设计起来也挺简单的下面我简单介绍一下我们的数据库。我们使用使用Microsoft Access数据库,Microsoft Access数据库是一个小型数据库使用起来也没有那么复杂,因为我们这个系统对数据库的要求不高所以我们选择了Microsoft Access数据库。在这里我们使用ADO技术进行数据库编程。

ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术。ADO技术基于COM,具有COM 组件的诸多优点,可以用来构造可复用应用框架,被多种语言支持,能够访问关系数据库、非关系数据库及所有的文件系统。另外,ADO还支持各种客户服务器模块与基于Web的应用程序,具有远程数据服务(RDS(Remote Data Service))的特性,是远程数据存取的发展方向。

ADO封装了OLE DB提供的接口,是基于OLE DB模型之上的更高层应用,比起OLE DB提供者,ADO的接口可以使程序员在更高级别上同数据交互,并且保留了MFCODBC和DAO的特性。ADO技术不仅可以应用于关系数

据库,也可以应用于非关系数据库。可以用统一的方法对不同的文件系统进行访问,大大简化了程序编制,增加了程序的可移植性。另外ADO的对象模型简化了对象的操作,因为它并不依赖于对象之间的相互层次作用。大多数情况下可以只关心所要创建和使用的对象,而无需了解其父对象。例如,在OLE DB 的操作中,必须先建立数据源和数据实用程序之间的连接才能打开一个行集对象,而在ADO中可以直接打开一个记录对象,而无需先建立与数据源的连接。

下面是我们设计的数据库:飞信、MSN、QQ的表是一样的有发送时间、本机账号、对方账号、聊天内容四个属性。文件使用记录的表有操作时间、文件标题、操作、文件路径四个属性。网页访问记录有访问时间、网页标题、网页地址三个属性。下面是我读写数据库的代码:

void CADOConn::OnInitADOConn()

{

初始化OLECOM 库环境

::CoInitialize(NULL);

try

{

创建connection 对象

m_pConnection.CreateInstance("ADODB.Connection");

设置连接字符串

_bstr_t strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dt.mdb";

SERVER 和UID,PWD的设置根据实际情况来设置

m_pConnection->Open(strConnect,"","",adConnectUnspecified);

}catch (_com_error e) {

AfxMessageBox(e.Description());

}

}

_RecordsetPtr& CADOConn::GetRecordSet(_bstr_t bstrSQL)

{

try

{

if(m_pConnection==NULL)

OnInitADOConn();

m_pRecordset.CreateInstance(_uuidof(Recordset));

HRESULT (bstrSQL,m_pConnection.GetInterfacePtr(),

adOpenDynamic,adLockOptimistic,adCmdText);

}catch(_com_error e)

{

AfxMessageBox(e.Description());

}

return m_pRecordset;

}

BOOL CADOConn::ExecuteSQL(_bstr_t bstrSQL)

{

_variant_t RecordsAffected;

try

{

if(m_pConnection==NULL)

OnInitADOConn();

m_pConnection->Execute(bstrSQL,NULL,adCmdText);

return true;

}

catch(_com_error e)

{

AfxMessageBox(e.Description());

return false;

}

}

4.3 文件使用记录的设计与实现

文件使用的监控我们主要是通过线程技术实现的,通过创建一个线程对文件进程监控,能监控文件的增加、删除、修改、重命名。

下面是文件监控的一个截图:

关键代码:

enum ACTION { ADDED=1, REMOVED=2, MODIFIED=3, RENAMED=4 }; void FileDeal( ACTION act, char *pszFileName1, char *pszFileName2, HWND false;

char buf[ 2*(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH) ];

FILE_NOTIFY_INFORMATION*

pNotify=(FILE_NOTIFY_INFORMATION *)buf;

DWORD BytesReturned;

while(g_bStartFileMinitor)

{

}

return 0;

}

4.4 电脑运行时间的设计与实现

电脑运行时间的监控也是通过多线程技术实现的在这里我们新建了一个CTimeConfDlg类用来监控电脑是否在可以运行的时间段运行如果不是在允许的时间范围内使用电脑电脑会自动关机。我创建一个线程获取配置中的数据并跟系统当前时间进行比较来获得电脑是不是在指定的时间段运行并做出相应的反应。

int CompareTime(CTimeConfDlg* pDlg,int nFlag)

{

COleDateTime oleCurTime;

COleDateTime oleBeginTime, oleFinishTime;

switch(nFlag) {

case 1:

{

pDlg->m_dtpBegin1.GetTime(oleBeginTime);

pDlg->m_dtpFinish1.GetTime(oleFinishTime);

break;

}

case 2:

{

pDlg->m_dtpBegin1.GetTime(oleBeginTime);

pDlg->m_dtpFinish1.GetTime(oleFinishTime);

break;

相关主题
文本预览
相关文档 最新文档