返回下载首页
返回新闻首页
欢迎联系我们
站内搜索:
资讯中心
软件下载
热门下载:
迅雷
腾讯QQ
傲游
暴风
MSN
酷我
最新列表
新闻资讯
软件产业
技巧应用
软件评测
教程中心
电脑安全
游戏娱乐
软件学院
编程开发
硬件导购
手机数码
论坛社区
网站地图
首页
>
新闻系统
>
编程天地
> 文章正文
基于Delphi的屏幕抓图技术的实现
2007-09-27 11:16:17 来源:计算机与信息技术 作者:张春艳 孙波 点击:
本文以Delphi7.0作为开发平台,给出了网络监控软件中的两种屏幕抓图技术的设计方法和步骤。
摘 要:
本文以
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;
9
7
3
1
2
4
8
:
相关文章:
DELPHI如何在菜单中显示图片?
C#中如何调用Delphi写的Dll
Delphi中DBEdit组件使用方法
Delphi中Hash表的使用方法
在Delphi编程中使用C语言代码
用DELPHI在状态栏中显示进程条
VC和Delphi程序只运行一个实例的方法
以远程计算机上的用户身份访问Com+应用
Delphi中建议使用的语句
如何使用Delphi设计强大的服务器程序
DELPHI如何在菜单中显示图片?
C#中如何调用Delphi写的Dll
Delphi中DBEdit组件使用方法
多普达696手机屏幕抓图的方法推荐
Delphi中Hash表的使用方法
在Delphi编程中使用C语言代码
用Visual C++设计屏幕抓图程序
Delphi中为TreeView添加单选和复选框
用DELPHI在状态栏中显示进程条
VC和Delphi程序只运行一个实例的方法
评论加载中...
loading...
编辑部信箱
去论坛给我们提意见
精彩推荐
焦点大图推荐
本类热门文章
论坛美图
本周软件下载排行