说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

用Delphi实现远程屏幕抓取

HTML文档下载 WORD文档下载 PDF文档下载
用Delphi实现远程屏幕抓取

在网络管理中,有时需要通过监视远程计算机屏幕来了解网上微机的使用情况。虽然,市面上有很多软件可以实现该功能,有些甚至可以进行远程控制,但在使用上缺乏灵活性,如无法指定远程计算机屏幕区域的大小和位置,进而无法在一屏上同时监视多个屏幕。其实,可以用Delphi自行编制一个灵活的远程屏幕抓取工具,简述如下。

一、软硬件要求。

Windows95/98对等网,用来监视的计算机(以下简称主控机)和被监视的计算机(以下简称受控机)都必须装有TCP/IP 协议,并正确配置。如没有网络,也可以在一台计算机上进行调试。

二、实现方法。

编制两个应用程序,一个为VClient.exe,装在受控机上,另一个为VServer.exe,装在主控机上。VServer.exe指定要监视的受控机的IP地址和将要在受控机屏幕上抓取区域的大小和位置,并发出屏幕抓取指令给VClient.exe,VClient.exe得到指令后,在受控机屏幕上选取指定区域,生成数据流,将其发回主控机,并在主控机上显示出抓取区域的BMP图象。由以上过程可以看出,该方法的关键有二:一是如何在受控机上进行屏幕抓取,二是如何通过TCP/IP协议在两台计算机中传输数据。

UDP(User Datagram Protocol,意为用户报文协议)是Internet上广泛采用的通信协议之一。与TCP协议不同,它是一种非连接的传输协议,没有确认机制,可靠性不如TCP,但它的效率却比TCP高,用于远程屏幕监视还是比较适合的。同时,UDP控件不区分服务器端和客户端,只区分发送端和接收端,编程上较为简单,故选用UDP协议,使用Delphi 4.0提供的TNMUDP控件。

三、创建演示程序。

第一步,编制VClient.exe文件。新建Delphi工程,将默认窗体的Name属性设为“Client”。加入TNMUDP控件,Name属性设为“CUDP”;LocalPort属性设为“1111”,让控件CUDP监视受控机的1111端口,当有数据发送到该口时,触发控件CUDP的OnDataReceived事件;RemotePort属性设为“2222”,当控件CUDP发送数据时,将数据发到主控机的2222口。

在implementation后面加入变量定义

const BufSize=2048;{ 发送每一笔数据的缓冲区大小 }

var

BmpStream:TMemoryStream;

LeftSize:Longint;{ 发送每一笔数据后剩余的字节数 }

为Client的OnCreate事件添加代码:

procedure TClient.FormCreate(Sender: TObject);

begin

BmpStream:=TMemoryStream.Create;

end;

为Client的OnDestroy事件添加代码:

procedure TClient.FormDestroy(Sender: TObject);

begin

BmpStream.Free;

end;

为控件CUDP的OnDataReceived事件添加代码:

procedure TClient.CUDPDataReceived(Sender: TComponent;

NumberBytes: Integer; FromIP: String);

var

CtrlCode:array[0..29] of char;

Buf:array[0..BufSize-1] of char;

TmpStr:string;

SendSize

LeftPos

TopPos

RightPos

BottomPos:integer;

begin

CUDP.ReadBuffer(CtrlCode

NumberBytes);{ 读取控制码 }

if CtrlCode[0]+CtrlCode[1]+CtrlCode[2]+CtrlCode[3]='show' then

begin { 控制码前4位为“show”表示主控机发出了抓屏指令 }

if BmpStream.Size=0 then { 没有数据可发,必须截屏生成数据 }

begin

TmpStr:=StrPas(CtrlCode);

TmpStr:=Copy(TmpStr

5

Length(TmpStr)-4);

LeftPos:=StrToInt(Copy(TmpStr

1

Pos(':'

TmpStr)-1));

TmpStr:=Copy(TmpStr

Pos(':'

TmpStr)+1

Length(TmpStr)

-Pos(':'

TmpStr));

TopPos:=StrToInt(Copy(TmpStr

1

Pos(':'

TmpStr)-1));

TmpStr:=Copy(TmpStr

Pos(':'

TmpStr)+1

Length(TmpStr)-

Pos(':'

TmpStr));

RightPos:=StrToInt(Copy(TmpStr

1

Pos(':'

TmpStr)-1));

BottomPos:=StrToInt(Copy(TmpStr

Pos(':'

TmpStr

)+1

Length(TmpStr)-Pos(':'

TmpStr)));

ScreenCap(LeftPos

TopPos

RightPos

BottomPos); {

截取屏幕 }

end;

if LeftSize>BufSize then SendSize:=BufSize

else SendSize:=LeftSize;

BmpStream.ReadBuffer(Buf

SendSize);

LeftSize:=LeftSize-SendSize;

if LeftSize=0 then BmpStream.Clear;{ 清空流 }

CUDP.RemoteHost:=FromIP; { FromIP为主控机IP地址 }

CUDP.SendBuffer(Buf

SendSize); { 将数据发到主控机的2222口 }

end;

end;

其中ScreenCap是自定义函数,截取屏幕指定区域,

代码如下:

procedure TClient.ScreenCap(LeftPos

TopPos

RightPos

BottomPos:integer);

var

RectWidth

RectHeight:integer;

SourceDC

DestDC

Bhandle:integer;

Bitmap:TBitmap;

begin

RectWidth:=RightPos-LeftPos;

RectHeight:=BottomPos-TopPos;

SourceDC:=CreateDC('DISPLAY'

''

''

nil);

DestDC:=CreateCompatibleDC(SourceDC);

Bhandle:=CreateCompatibleBitmap(SourceDC

RectWidth

RectHeight);

SelectObject(DestDC

Bhandle);

BitBlt(DestDC

0

0

RectWidth

RectHeight

SourceDC

LeftPos

TopPos

SRCCOPY);

Bitmap:=TBitmap.Create;

Bitmap.Handle:=BHandle;

BitMap.SaveToStream(BmpStream);

BmpStream.Position:=0;

LeftSize:=BmpStream.Size;

Bitmap.Free;

DeleteDC(DestDC);

ReleaseDC(Bhandle

SourceDC);

end;

存为“C:\VClient\ClnUnit.pas”和“C:\VClient\VClient.dpr”,

并编译。

第二步,编制VServer.exe文件。新建Delphi工程,将窗体的Name属性设为“Server”。加入TNMUDP控件,Name属性设为“SUDP”;LocalPort属性设为“2222”,让控件SUDP监视主控机的2222端口,当有数据发送到该口时,触发控件SUDP的OnDataReceived事件;RemotePort属性设为“1111”,当控件SUDP发送数据时,将数据发到受控机的1111口。加入控件Image1,Align属性设为“alClient”;加入控件Button1,Caption属性设为“截屏”;加入控件Label1,Caption属性设为“左:上:右:下”;加入控件Edit1,Text属性设为“0:0:100:100”;加入控件Label2,Caption属性设为“受控机IP地址”;加入控件Edit2,Text属性设为“127.0.0.1”;

在implementation后面加入变量定义

const BufSize=2048;

var

RsltStream

TmpStream:TMemoryStream;

为Server的OnCreate事件添加代码:

procedure TServer.FormCreate(Sender: TObject);

begin

RsltStream:=TMemoryStream.Create;

TmpStream:=TMemoryStream.Create;

end;

为Client的OnDestroy事件添加代码:

procedure TServer.FormDestroy(Sender: TObject);

begin

RsltStream.Free;

TmpStream.Free;

end;

为控件Button1的OnClick事件添加代码:

procedure TServer.Button1Click(Sender: TObject);

var ReqCode:array[0..29] of char;ReqCodeStr:string;

begin

ReqCodeStr:='show'+Edit1.Text;

StrpCopy(ReqCode

ReqCodeStr);

TmpStream.Clear;

RsltStream.Clear;

SUDP.RemoteHost:=Edit2.Text;

SUDP.SendBuffer(ReqCode

30);

end;

为控件SUDP的OnDataReceived事件添加代码:

procedure TServer.SUDPDataReceived(Sender: TComponent;

NumberBytes: Integer; FromIP: String);

var ReqCode:array[0..29] of char;ReqCodeStr:string;

begin

ReqCodeStr:='show'+Edit1.text;

StrpCopy(ReqCode

ReqCodeStr);

SUDP.ReadStream(TmpStream);

RsltStream.CopyFrom(TmpStream

NumberBytes);

if NumberBytes< BufSize then { 数据已读完 }

begin

RsltStream.Position:=0;

Image1.Picture.Bitmap.LoadFromStream(RsltStream);

TmpStream.Clear;

RsltStream.Clear;

end

else

begin

TmpStream.Clear;

ReqCode:='show';

SUDP.RemoteHost:=Edit2.Text;

SUDP.SendBuffer(ReqCode

30);

end;

end;

存为“C:\VServer\SvrUnit.pas”和

“C:\VServer\VServer.dpr”,并编译。

四、测试。

1、本地机测试:在本地机同时运行Vserver.exe和VClient.exe,利用程序的默认设置,即可实现截屏。查看“控制面板”-“网络”-“TCP/IP”-“IP地址”,将程序的“客户IP地址”设为该地址 ,同样正常运行。

2、远程测试:选一台受控机,运行VClient.exe;另选一台主控机,运行VServer.exe,将“受控机IP地址”即Edit2的内容设为受控机的IP地址,“截屏”即可。以上简要介绍了远程屏幕抓取的实现方法,至于在主控机上一屏同时监视多个受控机,读者可自行完善。以上程序,在Windows98对等网、Delphi 4.0下调试通过。

屌丝伞兵的逆袭:4人+盛大+远程+最佳手游 新年头彩:Chartboost喜获1900万美元融资 高富帅跻身移动领域 福特开放车载声控API 传低端iPhone最低只要99美元 你怎么看? 辉煌不再 Encanto超级计算机可能被拆分“出售” 知己知彼 企业应用移足云端必须清楚的10大方面 NVIDIA推Android掌机:七年孕育可否成就野心? 人民日报:2013关于新媒体的8个猜想 互联网大时代成就创新小企业 移动互联网创新论坛报道 Mobile Detect:判断移动设备类型的开源PHP类 我是如何Hack Facebook Employees Secure Files Transfer服务的 投资可再生能源:Google 2亿美元投资风力农场 构筑商业生态系统 阿里巴巴集团全面变革组织架构和管理体系 美国众多银行网站遭DDoS攻击 疑似伊朗所为 构建高可扩Web架构和分布式系统实战 CES2013 AMD发布移动处理器路线图和环绕计算概念 对话Linus Torvalds:大多黑客甚至连指针都未理解 PaaS玩家们,怎么演好自己的角色? Apple高管表态:低端机绝不是iPhone的未来 Web开发人员应该知道的IE 10兼容性问题 一周消息树:CES2013揭幕 科技巨头纷纷发力 2012专利排行榜 IBM位列第一、Google增长最快! 微软赞黑客并称Windows RT越狱非安全漏洞所致 周报第46期:GitHub历史上最糟糕宕机事故回放及反省 著名计算机黑客Aaron Swartz自杀身亡 移动周报:移动互联网行业技术趋势前瞻 旁门左道:让移动游戏下载量暴涨的邪门功夫 可植入身体:“可穿戴计算”时代来临 Web服务器份额:Apache仍居首,Nginx将超IIS 防税务欺诈:挪威财政部将开源收银机代码 响应式设计实战:3人+1.5个月 IE10优化版cnBeta诞生记 小女子问一个很小很小的问题。举手之劳 好不容易才找到ACTIVE SKIN4.27的破解机 JDK文档 1000分都给你!谁能列出最好的几本算法与数据结构书,并提供下载地址? 请教一个问题~~~~~~!在线等~! 1000分都给你!谁能列出最好的几本算法与数据结构书,并提供下载地址? 1000分都给你!谁能列出最好的几本算法与数据结构书,并提供下载地址? 请问sql server 2000数据库 的unicode->big5如何转换? 倒分揭露 vc我自建了一个子窗体类,点击主窗体时显示,怎么做啊? 难道我的word文档全都废了吗?? 帮帮忙!一个小问题!呵呵! "自助建站系统"到底能不能实现真正的二级域名、独立域名? 请看看我的代码有什么问题 如何将一个OLE对象转换为位图(注:不要截屏的方式) 在olecontainer里面调出的excel文档,如何使之不可编辑。 急救啊!这个字体怎么设置? 请问在jcreator下能不能编译成exe啊? small_wei进来领分! 初学这样的,觉得是很简单的思路,但找不出错误,有经验的帮忙看看 if a sql syntan can succeed in sql but asp... GDI+的问题 谁有FLASH的注册码,给个,谢谢 怎样用js写一个终止程序,类似asp的response.end 求教:学习MFC文件系统-针对一段代码的3个初学者问题 如何使98一开机就运行屏保!!!急!!!来者有分!帮忙了!!!!! 怪问题 <了解Struts1.1 > 我刚看到的一篇好文章,贴出来,大家共享 dayday up (: 如何驱动8139网卡(笔记本) interbase能与VC结合吗?另外想问有些软件与interbase一起打包安装,如何实现的呢? Lotus——你在哪里? 网络编程中遇到的几个问题(求助) 在java中调用javac.exe 紧急在线等待,求助!!!!! 我是新来的,很多都不懂!也没有朋友,有谁能和我做朋友么? 分手为什么只要一个人说了就算,为什么不能像离婚一样要双方同意,法院判决??? 关于从TImage继承创建自定义控件的问题? JRUN4怎么运行Servlet? 关于远程创建表,删除表的问题?请帮忙。 启动数据库时报 监听程序无法启动专用服务器进程???ORACLE 9.2.0.1.0 如何將指針作為參數傳遞。 请教vb自带的报表编程 在Sql语言中的取整函数是什么? 怎样将添加的记录到所有的现有记录后面? 如何装双系统?(在线等候) CSS一般要学多久才算掌握? 从事共享软件开发的进来谈谈做共享的辛酸好吗? 请教使用notifyicon遇到的问题 ActiveState.Visual.XSLT.for.VS.2003.v1.7.9.2475.WinNT2K无法安装。 如何合并两个dataset win98系统下ISAM问题 舟在碧波上,人在画中游中的碧是什么意思 salary 动物园大亨怎么可以让动物高兴地面都是适合的地面,环境也还好,植物石头都有了,就是一会这个动物不高兴,一会那个,都忙不过来了,怎么办呢样一种动物是要给它很大的空间吗,一般小型地图 开展综合实践活动课之前要做哪些方面的准备? postension slab是什么板是在图纸上出现的 tall me how to get 是什么意思 关于request的解释!‘就要这个解释两句说的通俗点就行了 综合实践活动是一门什么样的课程?(定义、性质与特点) air 若a^2+b^2+c^2=1 则3ab-3bc+2c^2最大值为 1、与传统的学科课程相比,综合实践活动课程有哪些新的特点?开设综合实践活动课程的意义和价值何在? 尘起尘落是什么意思很多都起这个网名 这个网名是什么意思 谁能告诉我 谢谢~ 这个字怎么读.(迩) 综合实践活动方法指导课是什么意思 形容做事认真刻苦的名言今天就要,不关于学习 Pass应用有WP版吗?或者在国内有类似Pass社交的应用吗? 下列细胞的膜结构能合成ATP的是( )A 线粒体的外膜 B 叶绿体的类囊体薄膜 C 内质网的膜 D高尔基体的膜 尘满是什么意思 听说现在都流行网络或者电话学英语,朋友介绍我去CEC,来问一下,CEC咋样? 体积相等的两个正方体,它的表面积也一定相等. 落落无尘是什么意思 cec英语的一对一外教,学过的朋友们,给点主意啊 OVM15-2(1)锚具 是什么意思? 关于做事认真,投入的名言 a+b+c=1,求ab^2c+abc^2的最大值 OVM15-22什么意思 捕获的近义词和反义词进义词反义词一样一个 直6棱柱的全面积怎么算?底面积怎么算 锚具OVM15-2P什么意思? 辛亥革命失败的一面 不若从炉塘道 稍迂而路辟 ∫[-∞,+∞]e^(-t^2)dt等于多少,求详细解答 基因重组发生在细胞核中吗? 友情是什么,它可以.造句 电工题,为什么du/dt不是等于0 很多都起这个网名 1.2小时等于多少分钟 谁知道这是什么动物,像猫但它脚好像比猫短,而且身体很臃肿啊.如图猫的脚怎么会这么短啊, 遂起谢绝尘累之念是什么意思 PASS什么意思 两只脚的动物都有翅膀吗?今天突然想到这样的一个怪问题,我不内行.拿出来请各位朋友或专家指导一下:陆地上好象两只脚的动物都有翅膀一样.不知是不是这样?是不是这样?不过,我还是不满 忽大风起,尘气莽莽然,城依稀而已.的意思 英语高考作文提高本人写作文时只能写出普通的主谓宾结构句子和定语从句.有时想用一些短语时,又不知道该放在句子的什么位置,有谁有一些作文句子结构的样式(说明一下哪些词放在哪里? 解释“舟行碧波上,人在画中游.” 英语翻译文章原文:A friend told me this story.He can stretch the truth a bit,so I’m not surewhether to believe him.But on the other hand,truth can be stranger thanfiction!What do you think?Two brothers were watching a horror film on video 判断:体积相等的两个正方体,表面积一定相等( ) 猫猫长翅膀是真的吗 在7点之前,明天就要交了(-ab+2)(ab+2) —(3m-n)(3m+n) (2a²-3b)(-2a²-3b) 先化简,再求值:(a+2)(a-2)减去(a-1)(a+5),其中a=负二分之一 (2x-3y)(-2x-3y) 10又七分之二×9又七分之五 解方程:(2x 判断2.两个正方体的表面积相等,体积一定相等【 】 elevated permission are required to run 人人网——欢乐动物园:怎样将动物送进动物管理处回收怎样将它送进动物管理回收呢? 判断:一个正方体的棱长扩大2倍,表面积扩大2倍,体积也扩大2倍.( ) Are you grassy?are you elevated?是什么意思?是习语吗? 明天要交的 7点之前给我加分!《小石潭记》中以“ ,”这八个字,描写了小石潭溪水的曲折婉转,以“ ”一句暗示了“小石潭”得名的由来.还有《壶口,壶口》的 为什么说倚身于秦晋大峡谷,“ 已知三角形abc和三角形a撇b撇c撇.中ab等于a撇b撇bc等于b撇c撇.设bc边上的高adb撇c撇边上的高a撇d撇,且ad等于a撇的d撇 表示看意思的什么尘莫及 what is the total (cost)? 在△ABC和△A撇B撇C撇中,AB/A撇B撇=BC/B撇C撇=AC/A撇C撇=2/3,且△A撇B撇C撇的周长为80cm,求三角形ABC. maintain 这一个关于“Tall Tale”的英语小故事急!8句话就行!就是荒诞,说大话,吹牛的小故事. 南京全面叫停“季建业时代”遗留雨污分杜海涛神似日本公主?盘点明星诡异撞脸南京一书店办裸体阅读图片展 称为提高南京一小学实行弹性放学制 允许学生延锯腿农民阻拦记者调查农村医保:不要管顾客超市停车场追尾 超市被判承担15快递员拒绝先验货后签收 买家扬言放狗金华女子偷肉被发现 脱光衣裤跳池塘劫匪一脚踩在温州姑娘脸上 逼其说出银前同事冒充海关中层干部承诺拍卖会搞定韩国称金正恩频繁观看气垫船登陆演习 朝将召开2万军官大会 韩称朝能未经中中国铺开周边外交新棋局 “问题”国家德国新一届联邦议院举行首次会议全国第3季度城市空气质量好排名 舟山玉环温岭入选全国百强县市 分别排第3中国8月转而减持逾百亿美元美债 仍为2013全国中小城市百强县市公布 义星巴克高管回应暴利 称在华利润并不比宁波前三季度经济运行情况公布 买本地伊朗考虑政治首都迁出德黑兰 或因城市爱心企业为昆明“3.01事件”受害者昆明100位志愿者轮流陪护3.01事李克强报告首次证实将在上海以外进行自楼继伟回应个税起征点会否再上调:简单湖北长江上游春季禁渔月余 抓获9名违英国一名教师强行将胶带粘在学生嘴上以黄兴国:在新一轮改革开放中争当领军者怎样深化公务员分类改革海尔电视、京东战略合作为消费者创造价郑新立向美国各界宣讲中共十八届三中全弘扬雷锋精神传播服务理念 邯郸志愿服海德格尔:“黑色笔记本”中的反犹立场摄影师拍摄速冻鲜花 “冰花绽放”画面朝鲜拒绝韩国有关红十字会工作会议提议听了总理的报告 来自甘肃的代表们觉得雷斌任伊春市委常委、副市长(简历)外国大使谈两会:中国决策影响整个世界全国人大代表梁明远建议: 在甘设立环全国人大代表何丽霞建议:推广牡丹籽提白岩松:建议法定节假日由11天增长到白岩松委员:呼吸是人生命最重要的权利
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘