基于Delphi的屏幕抓图技术的实现-Delphi-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝26
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:134回复:0

基于Delphi的屏幕抓图技术的实现

楼主#
更多 发布于:2016-06-12 11:57

 摘
要:这篇文章以Delphi7.0作为开发平台,给出了网络监控软件中的两种屏幕抓图技能的规划办法和过程。介绍了老师在计算机机房内教育时,怎么监控学生计算机显现器上的画面,以保证教育的质量和作用。
导言
跟着网络技能的飞速发展,计算机网络在各高等院校教育中的运用已十分遍及,可是,我们发现一个疑问,在教育的过程中,由于老师是面对着学生,而背对着学生计算机的显现器,不能随时检查学生计算机显现器上的内容,所以,有的学生在教育中偷玩游戏,影响了教育的质量和作用,因此,规划一款网络监控软件,监控学生计算机,十分必要。为了完成这一意图,此体系应具有以下功用:
(1)老师用机能够循环显现学生计算机的显现器上的画面。
(2)老师用机能够动态显现某一学生计算机的显现器上的画面。
(3)老师用机能够对学生用计算机宣布正告信息和操控信息。
(4)学生用计算机开机主动运转服务端监控程序。
(5)为了避免学生用计算机的服务端监控程序,被学生发现用Ctrl+Alt+Del封闭,在Ctrl+Alt+Del对话框中必须躲藏程序。一起,应当躲藏程序在任务栏的按钮。
这篇文章联系应用实习,重点向大家介绍在Delphi7.0中能够选用的两种完成屏幕抓图技能的操作办法。
程序完成
(1)抓取屏幕图画的难点有两个:一是怎么攫取屏幕的句柄,二是知道屏幕句柄后怎么获取屏幕的图画。Borland公司的规划人员用画布(Tcanvas)目标封装了Windows的大多数图形输出功用,能够经过它以更直观的方法和Windows的屏幕打交道,而不用关怀令人头疼的Windows
API函数。详细程序如下:
procedure TForm1.Timer1Timer(Sender:TObject);//抓取屏幕,并保存到Image控件中
var
Fullscreen:Tbitmap;
FullscreenCanvas:TCanvas;
dc:HDC;
begin
Fullscreen:=TBitmap.Create;
//创立一个BITMAP来寄存图象
Fullscreen.Width:=screen.width;
Fullscreen.Height:=screen.Height;
DC:=GetDC(0); //取得屏幕的DC,参数0指的是屏幕
FullscreenCanvas:=TCanvas.Create;
//创立一个CANVAS目标
FullscreenCanvas.Handle:=DC;
Fullscreen.Canvas.CopyRect(Rect(0,0,screen.Width,screen.Height),
fullscreenCanvas,Rect(0,0,Screen.Width,Screen.Height));
//把整个屏幕复制到BITMAP中
FullscreenCanvas.Free;
//开释CANVAS目标
ReleaseDC(0,DC); //开释DC
//*******************************
image1.picture.Bitmap:=fullscreen; //拷贝下的图象赋给IMAGE目标
image1.Width:=fullscreen.Width;
image1.Height:=fullscreen.Height;
fullscreen.free; //开释bitmap
form1.WindowState:=wsNormal; //恢复窗口状况
form1.show; //显现窗口
messagebeep(1); //BEEP叫一声,陈述图象现已截取好了。
end;
(2)Delphi的第三方控件ScreenCapture,它是一个极好的免费的截图控件,能够轻松抓取恣意巨细(全屏当然行)、屏幕的任何方位,还能够设置所截图画的形状、以及用何种形式截图。下面介绍的是用TcmWindow形式截图,运用十分简略,运用作用能够与闻名的抓图软件SnagIt32媲美。
procedure TForm1.BtnStartClick(Sender:TObject);
begin
ScreenCapture1.start; //开始截图
end;
//当截取屏幕成功时,此事情发作
procedure TForm1.ScreenCapture1Capture(Sender:TObject;Bitmap:TBitmap);
begin
//调整翻滚窗口的巨细以适应截获图画的巨细
Scrollbox1.HorzScrollBar.Range:= Image1.width;
Scrollbox1.VertScrollBar.Range:= Image1.height;
end;
procedure TForm1.FormCreate(Sender:TObject);
begin
//载入entntacp.dll文件
BtnStart.enabled:= ScreenCapture1.dllavailable;
//显现版别信息
caption:= '屏幕抓图软件' + ScreenCapture1.version;
end;
//当没有满足的内存支撑截取屏幕时,此事情发作
procedure TForm1.ScreenCapture1Error(Sender:TObject);
begin
MessageDlg('屏幕截取时发作一个过错!请封闭别的应用程序以获得更多内存资本.', mtError,[mbOK],0);
end;
//当用户按“Esc”键,即撤销屏幕截取时,此事情发作
procedure TForm1.ScreenCapture1UserCancelled(Sender:TObject);
begin
MessageDlg('用户撤销屏幕截取。',mtInformation,[mbOK],0);
end;
运转程序,作用如图1和图2所示。




图1 运转作用图




图2 抓取图画后的作用图
定论
经过对以上两种程序代码的调试运转,运用第三方控件的办法更易于规划完成,文中的程序代码悉数在Win2000和Delphi7.0环境下调试经过。










优质IT资源分享社区为你提供此文。
本站有大量优质Delphi教程视频,资料等资源,包含Delphi基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。
Delphi教程视频
优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客