为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

毕业设计_计算机远程控制程序设计

2017-09-30 50页 doc 280KB 14阅读

用户头像

is_601191

暂无简介

举报
毕业设计_计算机远程控制程序设计毕业设计_计算机远程控制程序设计 Southwest university of science and technology 本科毕业设计(论文) 计算机远程控制程序设计—— 计算机信息获取、控制技术研究及驻留程序设计 学院名称 专业名称 学生姓名 学号 指导教师 二〇一一年六月 西南科技大学本科生毕业论文 计算机远程控制程序设计——计算机信息 获取、控制技术研究及驻留程序设计 摘要:随着计算机网络技术的不断发展,网络安全问题变得越来越受人们关注。网络安全包括攻击和防范两大范畴。以往我们大多数以防范为...
毕业设计_计算机远程控制程序设计
毕业设计_计算机远程控制程序设计 Southwest university of science and technology 本科毕业设计(论文) 计算机远程控制程序设计—— 计算机信息获取、控制技术研究及驻留程序设计 学院名称 专业名称 学生姓名 学号 指导教师 二〇一一年六月 西南科技大学本科生毕业论文 计算机远程控制程序设计——计算机信息 获取、控制技术研究及驻留程序设计 摘要:随着计算机网络技术的不断发展,网络安全问变得越来越受人们关注。网络安全包括攻击和防范两大范畴。以往我们大多数以防范为主,如加密、防火墙等。但网络攻击技术与网络防范技术是密不可分的,了解网络攻击的方法和技术对于维护网络安全有着重要的意义。计算机远程控制程序能够使操作者通过基于Internet网络对远程主机进行控制,从而实现对网络远程计算机得信息获取、控制、等功能。随着Internet的广泛应用,远程控制系统能够实现很多的功能,其中军事上的应用尤为重要。本文以Windows系统为基础,使用Microsoft Visual C++ 6.0为主要开发工具,使用Windows API编程,开发远程控制程序,主要的任务是关于驻留端程序的设计,实现了对远程计算机的基本控制,信息获取。 关键词:计算机信息获取;远程控制;计算机木马 1 西南科技大学本科生毕业论文 Computer Remote Control Programming – Computer Access To Information, Control, Research And Resident Programming Abstract:.With the continuous development of computer network technology, network security issues become more and more attention. Network security, including attacks and prevent the two major areas. The past, most of us to prevent the main, such as encryption and firewalls. However, technology and network attacks against technology are inextricably linked, understanding of network attack methods and techniques for maintaining network security is of important significance .Computer remote control program that allows the operator to Internet-based network to control the remote host, in order to achieve a remote computer on the network have access to information, control, recording and other functions. With the extensive application of the Internet, Remote control system can achieve a lot of features, military applications which is particularly important. In this paper, Windows-based system, using Microsoft Visual C + + 6.0 as the main development tool, using the Windows API, The main task is to design the program on the resident side development of remote control procedures, the basic control of the remote computer, access to information. Keywords: Computer information access, Remote Control , Computer Trojan 2 西南科技大学本科生毕业论文 目 录 第1章 前言 ........................................................................................................................5 1.1 概述 ........................................................................................................................5 1.2 远程控制的基本原理 .............................................................................................6 1.2.1 远程控制软件的基本模式 .............................................................................7 1.2.2 远程控制常用软件 .........................................................................................7 1.3 论文选题及研究 .............................................................................................8 1.4 主要工作量 ............................................................................................................9 1.5 研究内容 .............................................................................................................. 10 1.5.1 主要研究内容 ............................................................................................... 10 1.5.2 主要技术要求 ............................................................................................... 10 第2章 远程控制程序的设计思路 ................................................................................... 11 2.1 关机、重启子程序 ............................................................................................... 11 2.2 读取计算机信息子程序 ....................................................................................... 12 2.3 增加帐户子程序................................................................................................... 13 2.4 截图子程序 .......................................................................................................... 13 2.5 键盘记录子程序................................................................................................... 15 2.6 主程序调用 .......................................................................................................... 15 2.7 本章小结 .............................................................................................................. 16 第3章 远程控制程序的设计 ........................................................................................... 17 3.1 子程序设计 .......................................................................................................... 17 3.1.1 计算机关机、重启程序设计 ........................................................................ 17 3.1.2 读取计算机信息程序设计 ........................................................................... 17 3.1.3 增加账户程序设计 ....................................................................................... 20 3.1.4 截图程序设计 ............................................................................................... 24 3.1.5 键盘记录程序设计 ....................................................................................... 26 3.2 主程序设计 .......................................................................................................... 27 结 论 ................................................................................................................................. 29 3 西南科技大学本科生毕业论文 致 谢 ................................................................................................................................... 30 参考文献 ............................................................................................................................. 31 4 西南科技大学本科生毕业论文 第1章 前言 1.1 概述 随着计算机网络的迅速普及,人类社会已经越来越离不开网络,网络使人类社会淡化了国家的限制。各国社会的经济、政治、文化等各个方面都开始倚重于网络方便迅速的信息传递方式。网络有着巨大的资源与强大的计算能力,这些也属于一种能量,其威力无法估量。网络当初建立时是基于各个节点相互信任的前提,但是事实上,使用网络节点的人相互之间并不是可以相互信任的。人类社会中存在窥探者、破坏者、盗窃者,网络上也有,而且在网络上做这些事情要更容易。网络蕴涵着强大的力量,这些力量又被不同的人或组织控制,于是有了力量冲突,这种力量的冲突是人类基本社会冲突在网络上的延伸,具有相同的性质。我们可以称这种冲突为网络战争,因为它确实和战争有很多共同点。 信息社会中,信息己成为人类宝贵的资源。近年来Internet正以惊人的速度在全球发展,Internet技术己经广泛渗透到各个领域。信息是战略资源,信息是决策之源,是控制战场的灵魂,信息决定火力和机动力。信息可以极大扩充军队智力和神经(指挥)系统的协调性,军事信息化是一次全面深层次的革命。 近年来,一些军事强国为了在信息化战场上夺取“制网权”优势,大胜采用网络对抗技术,实施各种攻防手段。海湾战争中,美军首次把网络攻击手段应用于实战。战前,美军就在伊拉克进口的一批计算机散件中预置了带病毒芯片。战争开始不久。伊拉克移个防空指挥网络即遭受病毒感染,组织指挥陷入混乱。几乎丧失了防空作战能力。俄军在强化网络战中十分重视“先机制敌”和实施主动性攻击。据悉,目前俄专家正加紧研制“远即离无线注人病毒武器”,对战略指挥控制系统产生直接威胁。 这都是应用对抗技术的体现,但日前的网络攻防并没有充分利用好。因而我们势必深人研究网络战中的对抗技术,使其分类系统化、明朗化才能讲求实用。 因此我国要从战略高度重视信息战的问题,必须认识到未来战争将主要是信息战。信息战将以覆盖全球的计算机网络为主战场,以攻击对方的信息系统为主要手段,运用 5 西南科技大学本科生毕业论文 高精尖的计算机技术,不仅破坏军事指挥和武器控制系统,而且会使其金融、交通、商业、医疗、电力等涉及国民经济命脉的诸多系统遭到破坏,从而不费一枪一炮达到攻城夺地的目的。 网络战必将成为未来信息战场新的作战样式。首先,网络技术的广泛应用,使得网络成为新的争夺空间。在信息时代里,网络正在成为联结个人和社会,现在和未来的纽带,各种各样的计算机网络都将成为一个国家的战略资源和战略命脉,一旦重要的网络陷入瘫痪,整个国家安全就面临着崩溃的危险,使“制网络权”的争夺与对抗不可避免。同时,随着网络技术在军事领域的快速发展,军队对计算机网络的依赖越来越大,网络与作战的联系也愈来愈紧密,网络成为新的战场空间。其次,网络的特殊战略作用,促使网络对抗与争夺向网络战方向发展。和常规作战中选择打击对象一样,网络攻击也是把对敌方的战略目标作为首要进攻对象。能否有效地摧毁敌重要网络系统,以便迅速达成一定的战略目的,就成为敌对双方进行全面网络争夺和对抗的焦点,这种对抗与争夺必然促使网络战成为新的作战样式登上战争舞台。 木马技术就是一种军民两用的网络攻击技术,由于木马本身的技术优势因而得到了广泛的应用,利用木马技术渗透到敌方系统内部,建立一个稳固的内部攻击点,为以后的攻击提供一个畅通无阻的安全通道,再由里及外,内外结合,往往可以收到更好的攻击效果。综上所述,网络战引起很多国家的普遍重视,网络攻击技术也相应的得到了长足的发展,目前,存在多种网络攻击技术,木马技术就是其中之一,研究开发先进的木马攻击技术使得在将来的网络战中抢占先机,立于不败之地具有重要的意义。 木马理论上基于服务器/客户端网络模型,但是这种模型不利于控制系统的隐藏。本文构建了一个强大的基于P2P网络模型的木马系统,它在Internet上通过控制系统和受控计算机建立一个完整的P2P网络,通过这个网络可以获取网络的计算资源,并且可以对这些资源进行隐蔽控制,从而可以有效完成各种特殊的任务。 而木马最近本的功能就是计算机远程控制,正式我们需要研究的方向。 1.2 远程控制的基本原理 远程控制是指在计算机网络上由一台主机(主控端)远距离控制另一台主机(驻留端) 的技术。当操作者使用主控端主机控制被控端主机时,就如同坐在被控端主机的屏幕前操作一样,可以启动被控端主机中的应用程序,可以使用文件资料,甚至可以利用被控 6 西南科技大学本科生毕业论文 端主机的各种外部设备。但是值得注意的是:主控端所做的一切控制操作如打开应用程序、上网浏览以及下载等都是在被控主机的计算下完成的;主控端主机只是将键盘和鼠标的指令传送给远程被控主机。 网络中的远程控制技术早于DOS时代就已提出,只不过当时由于网络应用范围不广,网络用户在这方面没有较大的要求,因此这项技术没有得到较大的发展。但是,随着计算机网络的广泛应用以及用户在应用中的需要,远程操作及控制技术越来越引起人们的关注。远程控制一般支持的网络方式:LAN、WAN、拨号方式、互联网方式。 1.2.1 远程控制软件的基本模式 远程控制一般支持局域网、广域网、无线网、拨号方式、宽带接入等方式,还可以支持直接连接,即通过串口、并口、红外端口来对远程主机进行控制。传统的远程控制软件一般使用TCP,IP、NET—BEUI、NETBIOS、IPX,SPX等协议来实现远程控制,也可以通过B,S模式或浏览器,中间件,服务器结构,即Web页面以Java技术来控制远程电脑,从而达到远程控制不同操作系统的目的。 远程控制实现机制:客户端将键盘和鼠标的操作信息实时传送给服务器端,由服务器端软件仿真为本地的键盘和鼠标操作,同时实时捕捉服务器端电脑的屏幕画面,通过网络回传到客户端。 远程控制软件通常由两部分组成:一部分是客户端(控制端)程序Client,另一部分是驻留端(受控端)程序Server,建成C,S模式。使用前需要在控制端运行客户端程序,在受控端运行服务器程序。然后由控制端向受控端发出信号,建立一个特殊的远程服务。再通过这个服务,使用各种远程控制功能发送远程控制命令,控制受控端电脑中的各种应用程序运行,这种远程控制方式称为基于远程服务的远程控制。 1.2.2 远程控制常用软件 各类远程控制软件种类繁多,可以运行在不同的工作平台,在屏幕截取,鼠标键盘控制上各有特色(常用的控制软件有如下几种: PCAnywhere:是点对点通信软件,可以远程监控、管理、调试,有卓越的自我保护功能和加密工具,功能强大,是远程控制软件的首选,适合于技术支持和企业内部部署。 7 西南科技大学本科生毕业论文 RemotelyAnywhere:基于Web客户端连接,操作简单,拥有用户所需要的全部网络管理工具,适于服务器管理。 冰河:可支持局域网,Modem上网,宽带上网等多种方式,功能强大,容易被黑客利用,被许多杀毒软件列为查杀对象。 QuiekIP:客户机可同时控制多个服务器,反之亦然。适用于多种场合。 VNC:免费跨平台的开放源码软件。 在Windows环境下,远程控制有以下2种实现方法: 1)Windows XP远程控制的实现“远程协助”和“远程桌面”是Windows XP系统提供的远程控制的方法。使用“远程协助”进行远程控制必须由主控双方协同才能够进行,通过MSN Messenger向联系人发出协助要求,在获得对方同意后,即可进行远程协助。 2)Windows 2000 Server远程控制的实现在服务器上安装配置好与客户端连接所需的协议,如IPX、TCP,IP、NETBEUI等,在安装“路由和远程访问”服务后,即可以配置运行Windows 2000 Server的远程访问服务器。Windows 2000 Server提供了拨号网络和VPN两种方式的远程访问。 1.3 论文选题及研究方案 本次论文的主要要求就是计算机远程控制程序设计——驻留端程序设计,即C,S中的Server端程序设计,要求实现一定的功能。如:计算机的关机、重启,获取计算机信息,增加帐户,截图、键盘记录等功能。 本远程控制程序是采用模块化设计的方法,将整个程序划分为主控制程序、重启控制子程序、关机控制子程序、计算机信息获取子程序、增加帐户子程序、截图子程序、键盘记录子程序等模块,通过这样的划分,我们可以清晰的构建出程序的流程图,可以方便程序的分块编写。 本次设计主要是编写一个程序,其主要功能是通过接收客户端的命令,实现控制,只需要编写关于驻留端的程序,实现控制即可,不用设计关于控制端的程序设计以及网络的对话,所以只需要构建出关于程序的控制的部分。 所以本次设计首要任务就是使用子程序实现要求的控制功能,如关机,重启等,分 8 西南科技大学本科生毕业论文 别用子程序实现; 其次才是编写一个主程序实现调用,构成一个完整的远程控制程序; 由于不需要网络通讯,就不需要使用远程命令代码控制,仅仅使用一个命令行在本机上实现控制功能即可。 本次设计是使用Microsoft Visual C++ 6.0进行设计,在Microsoft Visual C++ 6.0中有专门基于Windows控制的Windows API程序,可以简单的实现功能,所以在本次设计中主要使用的就是Windows API编程。 1.4 主要工作量 本次设计基本参照上述的研究方案进行,其具体工作量的统计如表1-1所示。 学习编写内容 工作量(h) 目的 查阅相关文献、资料 240 熟悉VC编程 学习关于Windows API编程 80 学习使用Windows API实现功能 关机、重启程序研究 40 编程实现计算机关机、重启 获取计算机信息程序研究 40 编程实现计算机信息获取 增加帐户程序研究 40 编程实现增加帐户 截图程序研究 80 编程实现程序截图 键盘记录程序研究 80 编程实现键盘记录 程序调用研究 80 主程序调用子程序实现功能 表1-1 主要工作量统计表 9 西南科技大学本科生毕业论文 1.5 研究内容 1.5.1 主要研究内容 基于设计的要求,我选择了使用Windows XP下的Microsoft Visual C++ 6.0作为开发工具,主要使用其中的Windows API函数来实现上述功能。 1)开发关于计算机关机的子程序 2)开发关于计算机重启的子程序 3)开发关于获取计算机信息的子程序 4)开发关于增加帐户的子程序 5)开发关于截图的子程序 6)开发关于键盘记录的子程序 7)开发程序调用的主程序 1.5.2 主要技术要求 (1)实现程序预期的主要功能; (2)实现调用过程; (3)可以通过简单修改主程可以实现从客户端调用主程序命令实现远程控制 10 西南科技大学本科生毕业论文 第2章 远程控制程序的设计思路 本次设计采用分步设计的方法,首先单独实现子程序功能,通过对子程序修改设计,再总体编写主程序,实现调用。本章重点介绍设计各个子程序的主要思路。 2.1 关机、重启子程序 在本次程序设计中,首先查阅了基于Windows API的函数接口编程实例,学习了关于系统system函数集,使用此函数可以实现计算机的关机与重启,也可以实现文件的删除等功能,主要使用Windows命令行命令来控制。分别写入两个子程序,方便最后组合的主程序调用。子程序流程图如图2-1。 图2-1 关机、重启子程序流程图 11 西南科技大学本科生毕业论文 2.2 读取计算机信息子程序 在Windows API中,可以获取与管理Windows 系统信息包括系统基本信息、时间信息、注册表。其中系统信息的获取主要包括系统目录、Windows安装目录、用户名、计算机名、域名等。 在这个子程序设计过程中,主要使用的就是Windows API函数来获取其中我们需要的信息,如安装目录、用户名、计算机名等。获取了这些信息,才有助于我们的远程控制,以及以后的后续操作。读取了计算机基本信息后输出到D:\get.txt。在调试功能实现以后,讲程序改编为子程序,方便以后主程序的调用。流程图如图2-2. 函数如下: 获取系统版本:GetVersionEx; 获取计算机硬件信息:GetSystemInfo; 获取安装目录:GetSystemDirectory; 获取用户名:GetUserName; 获取计算机名:GetComputerName; 图2-2读取计算机信息子程序流程图 12 西南科技大学本科生毕业论文 2.3 增加帐户子程序 在上一个子程序设计中,已经读取了计算机名以及用户名,为了方便以后的控制,驻留端计算机上增加一个属于自己的专用超级用户是必须的,我们假定增加的超级帐在 户名:admin;密码:admin,在Windows API中依然有关于计算机帐户添加的函数,调用增加即可。程序流程图如图2-3. 函数如下: 创建帐户:NetUserAdd; 将用户添加到用户组:NetGroupAddUser; 图2-3增加帐户子程序流程图 2.4 截图子程序 截取屏幕的流程: 截取屏幕输出一般需要经过以下步骤。 1)使用字符串“DISPLAY”为参数,调用CreateDC,得到类型为“显示”的DC。 2)调用CreateCompatibleDC创建一个内存DC。 3)得到需要截取的屏幕区域,比如调用GetDeviceCaps获取屏幕大小, 13 西南科技大学本科生毕业论文 GetWindowRect获取窗口区域等。 4)调用CreateCompatibleBitmap创建BITMAP。 5)调用SelectObject,将创建的BITMAP选择入内存DC,并将返回值使用另外一 个BITMAP对象句柄来保存,SelectObject的返回值表示了DC中呗替换的图形 对象。 6)调用BitBlt函数将源DC(显示类型的DC)指定位块 (bit-block)的颜色数据转移到目的DC(内存)中。 7)将之前保存的旧的BITMAP对象再调用SelectObject选择回内存DC中,这样从 显示的内存DC中BitBlt到内存DC中的位块颜色数据就被替换掉,SelectObject 的返回值即是从屏幕中得到的位图对象(HBITMAP类型)。 由于在我们程序设计的要求中,不需要调整截图的大小,只需要全屏幕截图之后保存就可以了,所以比较简单,不用调整获取区域。在截图完成后由内存输出到D:\jietu.bmp。程序流程图如图2-4。 如图2-4截图子程序流程图 14 西南科技大学本科生毕业论文 2.5 键盘记录子程序 在Windows API中,GetKey函数是记录键盘输入的信息,在键盘记录子程序的,使用GetKey函数,记录输出的信息,之后转换为我们平常看到的字符输出,输出到D:\ log.txt,中间主要的程序就是替换输入的信息和输出的信息转换,以及Shift和Caps Lock按键之后的字符转换。程序流程图如图2-5。 图2-5键盘记录子程序流程图 2.6 主程序调用 主程序中主要的功能就是在到输入的命令之后,分别调用子程序实现功能,在输入的过程中,根据命令调用子程序完成后返回进入待机状态,等待下一步命令,主程序中的命令输入可以与网络控制命令结合,直接实现远程控制,在本次设计中,只需要做出控制端程序,为了模拟控制,所以直接本地控制,如需要加上远程控制只需要与远程客户端程序添加调用程序即可。流程图如图2-6 15 西南科技大学本科生毕业论文 图2-6 主程序流程图 2.7 本章小结 本章主要是讨论本次设计中的有关功能实现流程,通过对程序子程序的规划、设计,实现了对远程控制程序基本功能。对各个子程序的功能实现的流程进行了分析,最后对使用主程序调用子程序实现功能。如果需要使用网络命令调用函数实现功能,只需要使用客户端程序调用代码修改即可。 16 西南科技大学本科生毕业论文 第3章 远程控制程序的设计 3.1 子程序设计 本次设计的主要功能是使用Windows API的函数实现的,其中主程序的调用在实际的设计中是可以与控制端程序联合设计,本次设计中只是为了方便功能的实现加入显示调用,子程序实现的功能(如截图的保存,键盘记录等)主要是保存在D盘目录下,方便以后的使用。 3.1.1 计算机关机、重启程序设计 使用VC中的system函数主要功能就是发出一个DOS命令,其中的函数变量即为DOC中的命令,system函数已经被收录在C库中,由于C++全面兼容了标准C库,所以在这儿就可以直接调用system函数实现可以用DOC命令行程序实现关于计算机的基本操作,如:关机、重启等。函数如下: system("shutdown -s -t 0"); //shutdown –s 为关机命令,-t为时间设置,默认为30秒,在此我们设置为0秒,即立刻关机 system("shutdown –r -t 0"); //shutdown –r 为重启命令,-t为时间设置,默认为30秒,在此我们设置为0秒,即立刻重启 上述两条功能实现调用了同一个函数,很简单,在此不做过多讨论。 3.1.2 读取计算机信息程序设计 以下的子程序设计基本上都是使用的Windows API函数实现的,首先是计算机基本信息的获取,计算机版本、用户名、计算机名的获取,在Windows API中有特定的的函数读取这些信息。 1)计算机版本的获取: 可以使用GetVersionEx函数获取系统版本信息,函数原型如下: BOOL GetVersionEx( LPOSVERSIONINFO lpVersionInfo ); 17 西南科技大学本科生毕业论文 ?参数 lpVersionInfo:输入、输出参数,此参数为OSVERSIONINFO或者OSVERSIONINFOEX结构的指针,用于存储获取的系统版本信息。这两个结构的第一个成员都是dwOSVersionInfoSize,如果使用OSVERSIONINFO结构那么将此成员设置为sizeof(OSVERSIONINFO)如果使用OSVERSIONINFOEX结构,那么设置此成员为sizeof(OSVERSIONINFOEX)。 ?返回值 BOOL类型,表示是否成功。使用GetLastError函数获取错误代码。 2)用户名、计算机名: 获取当前登录用户使用API函数GetUserName,获取计算机名使用API函数GetComputer Name,获取特定格式的计算机名使用API函数GetComputerNameEx,设置计算机名使用API函数SetComputerName和SetComputerNameEX。 GetUserName获取当前登录的用户名,函数定义如下: BOOL GetUserName( LPTSTR lpBuffer, LPDWORD nSize ); ?参数 lpBuffer:输出参数,指向保存登录用户名的内存缓冲区。其大小最好不小于(UNLEN+1), UNLEN 定义在Lmcons.h中。 nSize:输入、输出参数,指向表示lpBuffer的大小(字符数)的DWORD型变量。如果小于所需要的大小,那么lpnSize返回需要的大小,函数返回失败。 GetComputerName获取当前计算机名,函数的定义如下: BOOL GetComputerName( LPTSTR lpBuffer, LPDWORD lpnSize 18 西南科技大学本科生毕业论文 ); ?参数 lpBuffer:输出参数,指向保存计算机名的内存缓冲区,其大小最好不小于(MAX COMPU TERNAME一LENGTH+1)。 lpnSize:输入、输出参数,指向表示lpBuffer的大小(字符数)的DWORD型变量。 如果小于所需要的大小,那么lpnSize返回需要的大小,函数返回失败。 ?返回值 BOOL型,表示是否成功。使用GetLastError获取错误信息。 部分程序代码如下: void ShowInfo() {… //获取计算机版本信息 if(over.dwMajorVersion==5) { if(over.dwMajorVersion==0) lstrcat(szVersionInfo,”Windows 2000”); else if(over.dwMajorVersion==1) lstrcat(szVersionInfo,”Windows XP”); else if(over.dwMajorVersion==2) lstrcat(szVersionInfo,” Windows Server 2003”); } else if(over.dwMajorVersion==6) lstrcat(szVersionInfo,”Windows Vista”); else if lstrcat(szVersionInfo,”Windows NT 4.0 或者其他”); 19 西南科技大学本科生毕业论文 //获取计算机名以及用户名 DWORD dwComputerNameLen=MAX_COMPUTERNAME_LENGTH+1; DWORD dwUserNameLen=UNLEN+1; TCHAR szComputerName[MAX_COMPUTERNAME_LENGTH+1]; TCHAR szUserName[UNLEN+1]; COMPUTER_NAME_FORMAT conf; GetComputerName(szComputerName, &dwComputerNameLen); GetUserName(szUserName, &dwUserNameLen); } 图3-1 获取计算机信息结果截图 3.1.3 增加账户程序设计 程序的设计要求中是添加一个用户,本程序定义的是添加用户名为admin,密码为 admin的超级账户。 1)增加用户: 20 西南科技大学本科生毕业论文 在Windows API中,创建新用户的函数是NetUserAdd API,函数原型如下: NET_API_STATUS NetUserAdd( LMSTR servername, DWORD level, LPBYTE buf, LPDWORD parm_err ); servername参数是需要添加用户的主机名,如果是本机则设置为NULL。 level参数决定了buf参数的结构,设置为1、2、3、4分别表示buf参数所指向的 内容为USER_INFO_1、USER_INF0_2、USER_INFO_3、USER_INF0_4。这4个结构 都包括了用户的相关信息,只是所包括的信息的丰富程度不同。以USER_INFO_1为例, 包括用户的一些基本信息,用户名、密码、密码期限、优先级、用户HOME路径、描 述等。 typedef struct _USER_INFO_1{ LPWSTR usril_name; LPWSTR usril_password; DWORD usril_password_age; DWORD usril_priv; LPWSTR usril_home_dir; LPWSTR usril_comment; DWORD usril_flags; LPWSTR usril_script_path; }USER_INFO_1,*PUSER_INFO_1,*LPUSER_INFO_1; 2)将用户增加到administrator组中 NetGroupAddUser的功能分别是将用户添加到用户组,函数原型如下: 21 西南科技大学本科生毕业论文 NET_API_STATUS NetGroupAddUser( LPCWSTR servername, LPCWSTR GroupName, LPCWSTR username ); level参数也是指定buf参数的类型。buf参数类型包括GROUP_INFO_1、 GROUPINF02、GROUP_INF0_3、GROUPINF0_4。 部分程序代码如下: Int AddUser( LPWSTR NULL, LPWSTR admin, LPWSTR admin)//参数为:主机名(本机设置为NULL);用户名; 密码 { USER_INFO_1 ui; DWORD dwLevel = 1; DWORD dwError = 0; NET_API_STATUS nStatus; //填充USER_INFO_1 ui.usri1_name = admin;//用户名 ui.usri1_password=admin;//密码 ui.usri1_priv=USER_PRIV_USER;//级别 ui.usri1_home_dir=NULL; ui.usri1_comment=NULL; ui.usri1_flags=UF_SCRIPT; ui.usri1_script_path=MULL; 22 西南科技大学本科生毕业论文 //调用NetUserAdd,增加用户 nStatus=NetUserAdd(NULL, dwLevel, (LPBYTE)&ui, &dwError); } 图3-2 增加帐户前管理界面截图 23 西南科技大学本科生毕业论文 图3-3 增加帐户后管理界面截图 3.1.4 截图程序设计 在Windows环境中,设备上下文(DC)及基于设备上下文的绘图操作是用户界面的核心。在Windows API的帮助下程序可以很简单地得到设备上下文的实例,并通过这个设备上下文实例来获取屏幕图像。 //常量定义 #define PALVERSION 0x300 #define CAP_SHOW_MODE_STRTCH 1 #define CAP_SHOW_MODE_NOSTRTCH 0 //全局变量 HBITMAP ghBitmap=NULL; 24 西南科技大学本科生毕业论文 RECT rectShow; //修改此处可以更改截取不同窗口,null为全屏 LPSTR szCaptureWindowName =NULL; … DWORD WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdSshow) ghBitmap=ScreenCapture(“D:\\ jietu.bmp”,NULL); HBITMAP ScreenCapture (LPSTR filename,//截图保存路径 LPRECT lpRect)//截图区域u,为NULL时截全屏 { … HDC hdc=CreateDC(“DISPLAY”,NULL,NULL,NULL); int screenw=GetDeviceCaps(hdc,HORZRES); int screenh=GetDeviceCaps(hdc,VERIRES; HDC hmdc=CreateCompatibleDC(hdc); HBITMAP hbm=CreateCompatibleBitmap(hdc,screenw-screenh); SelectObject(hmdc,hbm); BitBlt(hmdc,0,0,screenw,screenh,hdc,0,0,SRCCOPy); … } 25 西南科技大学本科生毕业论文 图3-4 截图程序捕获桌面以及存放的位置 3.1.5 键盘记录程序设计 首先要分析主控端如何模拟获取操作者的操作。本文采用如下的数据结构来记录一次操作者的操作,这些数据结构定义在系统的头文件中。 typedef struct tagINPUT { DWORD type; union { KEYDBINPUT ki; HARDWAREINPUT hi; 26 西南科技大学本科生毕业论文 ); )INPUT,*PINPUT; 在上述的数据结构中, KEYDBINUT为键盘输入的数据。 string Filename = "D:\\log.txt"; //最后通过此命令输出到文件,路径为D:\ log.txt 如果需要远程控制,输出信息到远程计算机,则可以使用Windows API中的函数SendUserlnput实现,函数结构如下: BOOL SendUserlnput(INPUT *input,UINT number) 把操作信息传输到被控端。被控端在接收到主控端传来的输人信息后,直接调用WinAPl函数Sendlnput送给系统处理。 图3-5 键盘记录结果截图 3.2 主程序设计 本次设计的主要工作都已经在子程序中完成了,最后的主程序最要的功能就是为了实现子程序的调用,分别输入不同的命令,调用不同的子程序,实现计算机的控制,可以与控制端的网络命令一同实现计算机的远程控制。只需要使用简单if判断语句就可以 27 西南科技大学本科生毕业论文 实现。 主程序控制命令如下: 11——计算机关机; 12——计算机重启; 21——读取计算机信息; 31——增加admin账户; 41——屏幕截图; 51——键盘记录。 图3-5 主程序界面选择窗口 28 西南科技大学本科生毕业论文 结 论 通过本次课题的探索与研究,我们设计出了一个模拟的计算机远程控制驻留端程序,主要的方向就是计算机控制以及计算机记录方面,通过本地的控制可以实现功能,但是与远程计算机连接的控制方面融合不多,需要以后继续研究。 本次的程序设计主要包括了计算机关机、重启、信息读取、add账户、截图、键盘记录等子程序,在主程序中我们通调用将各个子程序连接起来,共同实现计算机的控制,形成了一个完成的程序。通过该程序,我们可以在界面上输入不同的命令是计算机实现不同的功能,以及得到计算机的信息等功能。本次设计的远程控制程序——驻留端主要能实现如下功能: a) 通过键盘输入命令可以实现计算机的关机; b) 通过键盘输入命令可以实现计算机的关机; c) 通过键盘输入命令可以实现计算机信息的读取,结果输出到D:\get.txt; d) 通过键盘输入命令可以在计算机administrator组中加入admin账户; e) 通过键盘输入命令可以实现计算机屏幕截图,结果输出到D:\jietu.bmp; f) 通过键盘输入命令可以实现计算机键盘输入数据记录,结果输出到D:\ log.txt; 29 西南科技大学本科生毕业论文 致 谢 四年的读书生活在这个季节即将划上一个句号,而于我的人生却只是一个逗号,我将面对又一次征程的开始。四年的求学生涯在师长、亲友的大力支持下,走得辛苦却也收获满囊,在论文即将付梓之际,思绪万千,心情久久不能平静。 伟人、名人为我所崇拜,可是我更急切地要把我的敬意和赞美献给一位平凡的人,我的导师——XXX老。我不是您最出色的学生,而您却是我最尊敬的老师。您治学严谨,学识渊博,思想师 深邃,视野雄阔,为我营造了一种良好的精神氛围。授人以鱼不如授人以渔,置身其间,耳濡目染,潜移默化,使我不仅接受了全新的思想观念,树立了宏伟的学术目标,领会了基本的思考方式,从论文题目的选定到论文写作的指导,经由您悉心的点拨,再经思考后的领悟,常常让我有“山重水复疑无路,柳暗花明又一村”。 感谢我的爸爸妈妈,焉得谖草,言树之背,养育之恩,无以回报,你们永远健康快乐是我最大的心愿。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚谢意~ 同时也感谢学院为我提供良好的做毕业设计的环境。 最后再一次感谢所有在毕业设计中曾经帮助过我的良师益友和同学,以及在设计中被我引用或参考的论著的作者。 30 西南科技大学本科生毕业论文 参考文献 [1] 胡建伟,汤建龙,杨绍全.《网络对抗原理[M]》.西安电子科技大学出版社,2004:236-268. [2] 邓丽,董渊,张瑞丰.《C++语言程序设计(第三版)[M]》.清华大学出版社,2004:324-358. [3] James F.Kurose,Keith W.Ross.《计算机网络 自顶向下方法[M]》.机械工业出版社,2009:596-607. 辽宁师范太学学报(自然科学版).V01,23 [4] 单春,《网络攻击中的特洛伊木马及其防范手段[J]》. No,34-39,2000. [5] 岳兵,霍宝锋,谢冰,赵云霞,刘伯莹.《网络入侵行为模式研究[M]》.天津大学学报,V01,36 No,25-29,2003. 《黑客技术与网络安全[M]》.北京:中国对外翻译出版公司,2000: 68-128. [6] 杨守君. [7] 卢勇焕.《黑客与安全[M]》.中国青年出版社,2001:6-19. 《计算机病毒与反病毒技术[M]》.清华大学出版社,199::110-126. [8] 张汉亭. [9] 张键.《防毒杀毒[M]》.电子工业出版社,1999:406-409. [10] 蔺聪.基于木马的黑客攻击技术[J]. [期刊论文].电脑知识与技术,2008(8):5-10. [11] 罗泽军.通信管理系统的安全性研究[J].[学位论文]硕士,2006:15-16. [12] 周凯.计算机网络常见攻击技术及其防范研究[J].[期刊论文].科技信息,2008(35):19-23. [13] 陈庆忠.木马程序设计[J].[学位论文]学士,2010:134-176. [14] 范文庆.周彬彬,安靖,精通Windows API—函数,接口,编程实例[M].人民邮电出版社,2009:307-356. [15] 宋彦儒,周翔.计算机远程控制系统设计[J].[学位论文],2008:1-6. [16] Jeff Prosise.MTC Windows程序设计[M].清华大学出版社,2001:307-349. [17] 丁寒舒,敬荣,汪渊.计算机远程控制研究[J].[期刊论文],2010:68-79. 31 西南科技大学本科生毕业论文 附录 API函数表 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接 WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称 WNetGetLastError 获取网络错误的扩展错误信息 WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口 GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 PostMessage 将一条消息投递到指定窗口的消息队列 PostThreadMessage 将一条消息投递给应用程序 RegisterWindowMessage 获取分配给一个字串标识符的消息编号 ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口 SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 32 西南科技大学本科生毕业论文 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台 CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件 DeviceIoControl 对设备执行指定的操作 DosDateTimeToFileTime 将DOS日期和时间值转换成一个 win32 FILETIME 值 FileTimeToDosDateTime 将一个 win32 FILETIME 值转换成DOS日期和时间值 FileTimeToLocalFileTime 将一个FILETIME结构转换成本地时间 FileTimeToSystemTime 根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构 FindClose 关闭由FindFirstFile函数创建的一个搜索句柄 FindFirstFile 根据文件名查找文件 FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件 FlushFileBuffers 针对指定的文件句柄,刷新内部文件缓冲区 FlushViewOfFile 将写入文件映射缓冲区的所有数据都刷新到磁盘 GetBinaryType 判断文件是否可以执行 GetCompressedFileSize 判断一个压缩文件在磁盘上实际占据的字节数 GetCurrentDirectory 在一个缓冲区中装载当前目录 GetDiskFreeSpace 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量 GetDiskFreeSpaceEx 获取与一个磁盘的组织以及剩余空间容量有关的信息 GetDriveType 判断一个磁盘驱动器的类型 GetExpandedName 取得一个压缩文件的全名 GetFileAttributes 判断指定文件的属性 GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制 GetFileSize 判断文件长度 GetFileTime 取得指定文件的时间信息 GetFileType 在给出文件句柄的前提下,判断文件类型 GetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息 GetFileVersionInfoSize 针对包含了版本资源的一个文件,判断容纳文件版本信息需要一 33 西南科技大学本科生毕业论文 个多大的缓冲区 GetFullPathName 获取指定文件的完整路径名 GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母 GetLogicalDriveStrings 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径 GetOverlappedResult 判断一个重叠操作当前的状态 GetPrivateProfileInt 为初始化文件(.ini文件)中指定的条目获取一个整数值 GetPrivateProfileSection 获取指定小节(在.ini文件中)所有项名和值的一个列表 GetPrivateProfileString 为初始化文件中指定的条目取得字串 GetProfileInt 取得win.ini初始化文件中指定条目的一个整数值 GetProfileSection 获取指定小节(在win.ini文件中)所有项名和值的一个列表 GetProfileString 为win.ini初始化文件中指定的条目取得字串 GetShortPathName 获取指定文件的短路径名 GetSystemDirectory 取得Windows系统目录(即System目录)的完整路径名 GetTempFileName 这个函数包含了一个临时文件的名字,它可由应用程序使用 GetTempPath 获取为临时文件指定的路径 GetVolumeInformation 获取与一个磁盘卷有关的信息 GetWindowsDirectory 获取Windows目录的完整路径名 hread 参考lread hwrite 参考lwrite函数 lclose 关闭指定的文件 lcreat 创建一个文件 llseek 设置文件中进行读写的当前位置 LockFile 锁定文件的某一部分,使其不与其他应用程序共享 LockFileEx 与LockFile相似,只是它提供了更多的功能 lopen 以二进制模式打开指定的文件 lread 将文件中的数据读入内存缓冲区 lwrite 将数据从内存缓冲区写入一个文件 LZClose 关闭由LZOpenFile 或 LZInit函数打开的一个文件 LZCopy 复制一个文件 LZInit 这个函数用于初始化内部缓冲区 34 西南科技大学本科生毕业论文 LZOpenFile 该函数能执行大量不同的文件处理,而且兼容于压缩文件 LZRead 将数据从文件读入内存缓冲区 LZSeek 设置一个文件中进行读写的当前位置 MapViewOfFile 将一个文件映射对象映射到当前应用程序的地址空间 MoveFile 移动文件 OpenFile 这个函数能执行大量不同的文件操作 OpenFileMapping 打开一个现成的文件映射对象 QueryDosDevice 在Windows NT中,DOS设备名会映射成NT系统设备名。该函数可判断当前的设备映射情况 ReadFile 从文件中读出数据 ReadFileEx 与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调 RegCloseKey 关闭系统注册表中的一个项(或键) RegConnectRegistry 访问远程系统的部分注册表 RegCreateKey 在指定的项下创建或打开一个项 RegCreateKeyEx 在指定项下创建新项的更复杂的方式。在Win32环境中建议使用这个函数 RegDeleteKey 删除现有项下方一个指定的子项 RegDeleteValue 删除指定项下方的一个值 RegEnumKey 枚举指定项的子项。在Win32环境中应使用RegEnumKeyEx RegEnumKeyEx 枚举指定项下方的子项 RegEnumValue 枚举指定项的值 RegFlushKey 将对项和它的子项作出的改动实际写入磁盘 RegGetKeySecurity 获取与一个注册表项有关的安全信息 RegLoadKey 从以前用RegSaveKey函数创建的一个文件里装载注册表信息 RegNotifyChangeKeyValue 注册表项或它的任何一个子项发生变化时,用这个函数提供一种通知机制 RegOpenKey 打开一个现有的注册表项 RegOpenKeyEx 打开一个现有的项。在win32下推荐使用这个函数 RegQueryInfoKey 获取与一个项有关的信息 RegQueryValue 取得指定项或子项的默认(未命名)值 35 西南科技大学本科生毕业论文 RegQueryValueEx 获取一个项的设置值 RegReplaceKey 用一个磁盘文件保存的信息替换注册表信息;并创建一个备份,在其中包含当前注册表信息 RegRestoreKey 从一个磁盘文件恢复注册表信息 RegSaveKey 将一个项以及它的所有子项都保存到一个磁盘文件 RegSetKeySecurity 设置指定项的安全特性 RegSetValue 设置指定项或子项的默认值 RegSetValueEx 设置指定项的值 RegUnLoadKey 卸载指定的项以及它的所有子项 RemoveDirectory 删除指定目录 SearchPath 查找指定文件 SetCurrentDirectory 设置当前目录 SetEndOfFile 针对一个打开的文件,将当前文件位置设为文件末尾 SetFileAttributes 设置文件属性 SetFilePointer 在一个文件中设置当前的读写位置 SetFileTime 设置文件的创建、访问及上次修改时间 SetHandleCount 这个函数不必在win32下使用;即使使用,也不会有任何效果 SetVolumeLabel 设置一个磁盘的卷标(Label) SystemTimeToFileTime 根据一个FILETIME结构的内容,载入一个SYSTEMTIME结构 UnlockFile 解除对一个文件的锁定 UnlockFileEx 解除对一个文件的锁定 UnmapViewOfFile 在当前应用程序的内存地址空间解除对一个文件映射对象的映射 VerFindFile 用这个函数决定一个文件应安装到哪里 VerInstallFile 用这个函数安装一个文件 VerLanguageName 这个函数能根据16位语言代码获取一种语言的名称 VerQueryValue 这个函数用于从版本资源中获取信息 WriteFile 将数据写入一个文件 WriteFileEx 与WriteFile类似,只是它只能用于异步写操作,并包括了一个完整的回调 WritePrivateProfileSection 为一个初始化文件(.ini)中指定的小节设置所有项名和值 WritePrivateProfileString 在初始化文件指定小节内设置一个字串 36 西南科技大学本科生毕业论文 WriteProfileSection 为Win.ini初始化文件中一个指定的小节设置所有项名和值 WriteProfileString 在Win.ini初始化文件指定小节内设置一个字串 BitBlt 将一幅位图从一个设备场景复制到另一个 CopyIcon 制作指定图标或鼠标指针的一个副本。这个副本从属于发出调用的应用程序 CopyImage 复制位图、图标或指针,同时在复制过程中进行一些转换工作 CreateBitmap 按照规定的格式创建一幅与设备有关位图 CreateBitmapIndirect 创建一幅与设备有关位图 CreateCompatibleBitmap 创建一幅与设备有关位图,它与指定的设备场景兼容 CreateCursor 创建一个鼠标指针 CreateDIBitmap 根据一幅与设备无关的位图创建一幅与设备有关的位图 CreateDIBSection 创建一个DIBSection CreateIcon 创建一个图标 CreateIconIndirect 创建一个图标 DestroyCursor 清除指定的鼠标指针,并释放它占用的所有系统资源 DestroyIcon 清除图标 DrawIcon 在指定的位置画一个图标 DrawIconEx 描绘一个图标或鼠标指针。与DrawIcon相比,这个函数提供了更多的功能 ExtractAssociatedIcon 判断一个可执行程序或DLL中是否存在图标,或是否有图标与系统注册表中指定的文件存在关联并提取之 ExtractIcon 判断一个可执行文件或DLL中是否有图标存在,并将其提取出来 GetBitmapBits 将来自位图的二进制位复制到一个缓冲区 GetBitmapDimensionEx 取得一幅位图的宽度和高度 GetDIBColorTable 从选入设备场景的DIBSection中取得颜色表信息 GetDIBits 将来自一幅位图的二进制位复制到一幅与设备无关的位图里 GetIconInfo 取得与图标有关的信息 GetStretchBltMode 判断StretchBlt 和 StretchDIBits函数采用的伸缩模式 LoadBitmap 从指定的模块或应用程序实例中载入一幅位图 LoadCursor 从指定的模块或应用程序实例中载入一个鼠标指针 LoadCursorFromFile 在一个指针文件或一个动画指针文件的基础上创建一个指针 LoadIcon 从指定的模块或应用程序实例中载入一个图标 37 西南科技大学本科生毕业论文 LoadImage 载入一个位图、图标或指针 MaskBlt 执行复杂的图象传输,同时进行掩模(MASK)处理 PatBlt 在当前选定的刷子的基础上,用一个图案填充指定的设备场景 PlgBlt 复制一幅位图,同时将其转换成一个平行四边形。利用它可对位图进行旋转处理 SetBitmapBits 将来自缓冲区的二进制位复制到一幅位图 SetBitmapDimensionEx 设置一幅位图的宽度。以一毫米的十分之一为单位 SetDIBColorTable 设置选入设备场景的一个DIBSection的颜色表信息 SetDIBits 将来自与设备无关位图的二进制位复制到一幅与设备有关的位图里 SetDIBitsToDevice 将一幅与设备无关位图的全部或部分数据直接复制到一个设备 StretchDIBits函数的伸缩模式 SetStretchBltMode 指定StretchBlt 和 StretchBlt 将一幅位图从一个设备场景复制到另一个 StretchDIBits 将一幅与设备无关位图的全部或部分数据直接复制到指定的设备场景 8. API之绘图函数 AbortPath 抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作 AngleArc 用一个连接弧画一条线 Arc 画一个圆弧 BeginPath 启动一个路径分支 CancelDC 取消另一个线程里的长时间绘图操作 Chord 画一个弦 CloseEnhMetaFile 关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄 CloseFigure 描绘到一个路径时,关闭当前打开的图形 CloseMetaFile 关闭指定的图元文件设备场景,并向新建的图元文件返回一个句柄 CopyEnhMetaFile 制作指定增强型图元文件的一个副本(拷贝) CopyMetaFile 制作指定(标准)图元文件的一个副本 CreateBrushIndirect 在一个LOGBRUSH数据结构的基础上创建一个刷子 CreateDIBPatternBrush 用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案) CreateEnhMetaFile 创建一个增强型的图元文件设备场景 38 西南科技大学本科生毕业论文 CreateHatchBrush 创建带有阴影图案的一个刷子 CreateMetaFile 创建一个图元文件设备场景 CreatePatternBrush 用指定了刷子图案的一幅位图创建一个刷子 CreatePen 用指定的样式、宽度和颜色创建一个画笔 CreatePenIndirect 根据指定的LOGPEN结构创建一个画笔 CreateSolidBrush 用纯色创建一个刷子 DeleteEnhMetaFile 删除指定的增强型图元文件 DeleteMetaFile 删除指定的图元文件 DeleteObject 删除GDI对象,对象使用的所有系统资源都会被释放 DrawEdge 用指定的样式描绘一个矩形的边框 DrawEscape 换码(Escape)函数将数据直接发至显示设备驱动程序 DrawFocusRect 画一个焦点矩形 DrawFrameControl 描绘一个标准控件 DrawState 为一幅图象或绘图操作应用各式各样的效果 Ellipse 描绘一个椭圆,由指定的矩形围绕 EndPath 停止定义一个路径 EnumEnhMetaFile 针对一个增强型图元文件,列举其中单独的图元文件记录 EnumMetaFile 为一个标准的windows图元文件枚举单独的图元文件记录 EnumObjects 枚举可随同指定设备场景使用的画笔和刷子 ExtCreatePen 创建一个扩展画笔(装饰或几何) ExtFloodFill 在指定的设备场景里,用当前选择的刷子填充一个区域 FillPath 关闭路径中任何打开的图形,并用当前刷子填充 FillRect 用指定的刷子填充一个矩形 FlattenPath 将一个路径中的所有曲线都转换成线段 FloodFill 用当前选定的刷子在指定的设备场景中填充一个区域 FrameRect 用指定的刷子围绕一个矩形画一个边框 GdiComment 为指定的增强型图元文件设备场景添加一条注释信息 GdiFlush 执行任何未决的绘图操作 GdiGetBatchLimit 判断有多少个GDI绘图命令位于队列中 GdiSetBatchLimit 指定有多少个GDI绘图命令能够进入队列 39 西南科技大学本科生毕业论文 GetArcDirection 画圆弧的时候,判断当前采用的绘图方向 GetBkColor 取得指定设备场景当前的背景颜色 GetBkMode 针对指定的设备场景,取得当前的背景填充模式 GetBrushOrgEx 判断指定设备场景中当前选定刷子起点 GetCurrentObject 获得指定类型的当前选定对象 GetCurrentPositionEx 在指定的设备场景中取得当前的画笔位置 GetEnhMetaFile 取得磁盘文件中包含的一个增强型图元文件的图元文件句柄 GetEnhMetaFileBits 将指定的增强型图元文件复制到一个内存缓冲区里 GetEnhMetaFileDescription 返回对一个增强型图元文件的说明 GetEnhMetaFileHeader 取得增强型图元文件的图元文件头 GetEnhMetaFilePaletteEntries 取得增强型图元文件的全部或部分调色板 GetMetaFile 取得包含在一个磁盘文件中的图元文件的图元文件句柄 GetMetaFileBitsEx 将指定的图元文件复制到一个内存缓冲区 GetMiterLimit 取得设备场景的斜率限制(Miter)设置 GetNearestColor 根据设备的显示能力,取得与指定颜色最接近的一种纯色 GetObjectAPI 取得对指定对象进行说明的一个结构 GetObjectType 判断由指定句柄引用的GDI对象的类型 GetPath 取得对当前路径进行定义的一系列数据 GetPixel 在指定的设备场景中取得一个像素的RGB值 GetPolyFillMode 针对指定的设备场景,获得多边形填充模式 GetROP2 针对指定的设备场景,取得当前的绘图模式 GetStockObject 取得一个固有对象(Stock) GetSysColorBrush 为任何一种标准系统颜色取得一个刷子 GetWinMetaFileBits 通过在一个缓冲区中填充用于标准图元文件的数据,将一个增强型图元文件转换成标准windows图元文件 InvertRect 通过反转每个像素的值,从而反转一个设备场景中指定的矩形 LineDDA 枚举指定线段中的所有点 LineTo 用当前画笔画一条线,从当前位置连到一个指定的点 MoveToEx 为指定的设备场景指定一个新的当前画笔位置 PaintDesk 在指定的设备场景中描绘桌面墙纸图案 40 西南科技大学本科生毕业论文 PathToRegion 将当前选定的路径转换到一个区域里 Pie 画一个饼图 PlayEnhMetaFile 在指定的设备场景中画一个增强型图元文件 PlayEnhMetaFileRecord 回放单独一条增强型图元文件记录 PlayMetaFile 在指定的设备场景中回放一个图元文件 PlayMetaFileRecord 回放来自图元文件的单条记录 PolyBezier 描绘一条或多条贝塞尔(Bezier)曲线 PolyDraw 描绘一条复杂的曲线,由线段及贝塞尔曲线组成 Polygon 描绘一个多边形 Polyline 用当前画笔描绘一系列线段 PolyPolygon 用当前选定画笔描绘两个或多个多边形 PolyPolyline 用当前选定画笔描绘两个或多个多边形 Rectangle 用当前选定的画笔描绘矩形,并用当前选定的刷子填充 RoundRect 用当前选定的画笔画一个圆角矩形,并用当前选定的刷子在其中填充 SelectClipPath 将设备场景当前的路径合并到剪切区域里 SelectObject 为当前设备场景选择图形对象 SetArcDirection 设置圆弧的描绘方向 SetBkColor 为指定的设备场景设置背景颜色 SetBkMode 指定阴影刷子、虚线画笔以及字符中的空隙的填充方式 SetBrushOrgEx 为指定的设备场景设置当前选定刷子的起点 SetEnhMetaFileBits 用指定内存缓冲区内包含的数据创建一个增强型图元文件 SetMetaFileBitsEx 用包含在指定内存缓冲区内的数据结构创建一个图元文件 SetMiterLimit 设置设备场景当前的斜率限制 SetPixel 在指定的设备场景中设置一个像素的RGB值 SetPixelV 在指定的设备场景中设置一个像素的RGB值 SetPolyFillMode 设置多边形的填充模式 SetROP2 设置指定设备场景的绘图模式。与vb的DrawMode属性完全一致 SetWinMetaFileBits 将一个标准Windows图元文件转换成增强型图元文件 StrokeAndFillPath 针对指定的设备场景,关闭路径上打开的所有区域 StrokePath 用当前画笔描绘一个路径的轮廓。打开的图形不会被这个函数关闭 41 西南科技大学本科生毕业论文 UnrealizeObject 将一个刷子对象选入设备场景之前,如刷子的起点准备用SetBrushOrgEx修改,则必须先调用本函数 WidenPath 根据选定画笔的宽度,重新定义当前选定的路径 9. API之设备场景函数 CombineRgn 将两个区域组合为一个新区域 CombineTransform 驱动世界转换。它相当于依顺序进行两次转换 CreateCompatibleDC 创建一个与特定设备场景一致的内存设备场景 CreateDC 为专门设备创建设备场景 CreateEllipticRgn 创建一个椭圆 CreateEllipticRgnIndirect 创建一个内切于特定矩形的椭圆区域 CreateIC 为专用设备创建一个信息场景 CreatePolygonRgn 创建一个由一系列点围成的区域 CreatePolyPolygonRgn 创建由多个多边形构成的区域。每个多边形都应是封闭的 CreateRectRgn 创建一个矩形区域 CreateRectRgnIndirect 创建一个矩形区域 CreateRoundRectRgn 创建一个圆角矩形 DeleteDC 删除专用设备场景或信息场景,释放所有相关窗口资源 DPtoLP 将点阵从设备坐标转换到专用设备场景逻辑坐标 EqualRgn 确定两个区域是否相等 ExcludeClipRect 从专用设备场景的剪裁区中去掉一个矩形区。矩形内不能进行绘图 ExcludeUpdateRgn 从专用设备场景剪裁区去掉指定窗口的刷新区域 ExtCreateRegion 根据世界转换修改区域 ExtSelectClipRgn 将指定区域组合到设备场景的当前剪裁区 FillRgn 用指定刷子填充指定区域 FrameRgn 用指定刷子围绕指定区域画一个外框 GetBoundsRect 获取指定设备场景的边界矩形 GetClipBox 获取完全包含指定设备场景剪裁区的最小矩形 GetClipRgn 获取设备场景当前剪裁区 GetDC 获取指定窗口的设备场景 GetDCEx 为指定窗口获取设备场景。相比GetDC,本函数提供了更多的选项 42 西南科技大学本科生毕业论文 GetDCOrgEx 获取指定设备场景起点位置(以屏幕坐标表示) GetDeviceCaps 根据指定设备场景代表的设备的功能返回信息 GetGraphicsMode 确定是否允许增强图形模式(世界转换) GetMapMode 为特定设备场景调入映象模式 GetRegionData 装入描述一个区域信息的RgnData结构或缓冲区 GetRgnBox 获取完全包含指定区域的最小矩形 GetUpdateRgn 确定指定窗口的刷新区域。该区域当前无效,需要刷新 GetViewportExtEx 获取设备场景视口(viewport)范围 GetViewportOrgEx 获取设备场景视口起点 GetWindowDC 获取整个窗口(包括边框、滚动条、标题栏、菜单等)的设备场景 GetWindowExtEx 获取指定设备场景的窗口范围 GetWindowOrgEx 获取指定设备场景的逻辑窗口的起点 GetWindowRgn 获取窗口区域 GetWorldTransform 如果有世界转换,为设备场景获取当前世界转换 IntersectClipRect 为指定设备定义一个新的剪裁区 InvalidateRgn 使窗口指定区域不活动,并将它加入窗口刷新区,使之可随后被重画 InvertRgn 通过颠倒每个像素值反转设备场景指定区域 LPtoDP 将点阵从指定设备场景逻辑坐标转换为设备坐标 ModifyWorldTransform 根据指定的模式修改世界转换 OffsetClipRgn 按指定量平移设备场景剪裁区 OffsetRgn 按指定偏移量平移指定区域 OffsetViewportOrgEx 平移设备场景视口区域 OffsetWindowOrgEx 平移指定设备场景窗口起点 PaintRgn 用当前刷子背景色填充指定区域 PtInRegion 确定点是否在指定区域内 PtVisible 确定指定点是否可见(即,点是否在设备场景剪裁区内) RectInRegion 确定矩形是否有部分在指定区域内 RectVisible 确定指定矩形是否有部分可见(是否在设备场景剪裁区内) ReleaseDC 释放由调用GetDC或GetWindowDC函数获取的指定设备场景 RestoreDC 从设备场景堆栈恢复一个原先保存的设备场景 43 西南科技大学本科生毕业论文 SaveDC 将指定设备场景状态保存到Windows设备场景堆栈 ScaleViewportExtEx 缩放设备场景视口的范围 ScaleWindowExtEx 缩放指定设备场景窗口范围 ScrollDC 在窗口(由设备场景代表)中水平和(或)垂直滚动矩形 SelectClipRgn 为指定设备场景选择新的剪裁区 SetBoundsRect 设置指定设备场景的边界矩形 SetGraphicsMode 允许或禁止增强图形模式,以提供某些支持(包括世界转换) SetMapMode 设置指定设备场景的映射模式 SetRectRgn 设置区域为指定的矩形 SetViewportExtEx 设置设备场景视口范围 SetViewportOrgEx 设置设备场景视口起点 SetWindowExtEx 设置指定设备场景窗口范围 SetWindowOrgEx 设置指定设备场景窗口起点 SetWindowRgn 设置窗口区域 SetWorldTransform 设置世界转换 ValidateRgn 激活窗口中指定区域,把它从刷新区移走 WindowFromDC 取回与某一设备场景相关的窗口的句柄 44
/
本文档为【毕业设计_计算机远程控制程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索