linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > Delphi >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·HexToStr函数和StrToHex函数
·Delphi中的进制转换
·delphi轻松设置无边框透明窗体
·DELPHI组件安装全攻略
·delphi第三方控件安装(Ehlib)
·delphi动态创建控件
·开发工具比较Visual C++ VS De
·delphi完整身份证效验程序实例
·如何判断文本文件的编码格式
·深入研究Variant数组
·delphi中的Format函数详解
·Delphi技巧-用户自定义数据类型
·用delphi编写网络游戏的外挂
·delphi编程获取打印机的打印任
·delphi设置控件透明
最新文章
·在应用程序中跟踪MOUSE的坐标
·压缩和修复MS Access 2000文件
·DELPHI 6.0 动画制做
·怎样在Delphi中调用LastError信
·怎样得到主域服务器名称
·怎样利用递归实现删除某一目录
·读出主键下所有项
·如何制作照片底片效果的图像(
·获得Modem的状态
·WebBrowser屏幕滚动的实现,设
·有关字符串处理的小技巧
·Delphi建立键盘鼠标动作纪录与
·Delphi中布尔类型辨析
·DELPHI程序注册码设计
·图形的不规则的Copy
Google
 
基于Delphi的屏幕抓图技术的实现
[ 作者:  加入时间:2007-09-30 16:10:55  来自:Linux联盟收集整理 ]
引言gvsLinux联盟
gvsLinux联盟
  随着网络技术的飞速发展,计算机网络在各高等院校教学中的使用已非常普遍,但是,我们发现一个问题,在教学的过程中,由于老师是面对着学生,而背对着学生计算机的显示器,不能随时查看学生计算机显示器上的内容,所以,有的学生在教学中偷玩游戏,影响了教学的质量和效果,因此,设计一款网络监控软件,监控学生计算机,十分必要。为了实现这一目的,此系统应具有以下功能:gvsLinux联盟
gvsLinux联盟
  (1)教师用机可以循环显示学生计算机的显示器上的画面。gvsLinux联盟
gvsLinux联盟
  (2)教师用机可以动态显示某一学生计算机的显示器上的画面。gvsLinux联盟
gvsLinux联盟
  (3)教师用机可以对学生用计算机发出警告信息和控制信息。gvsLinux联盟
gvsLinux联盟
  (4)学生用计算机开机自动运行服务端监控程序。gvsLinux联盟
gvsLinux联盟
  (5)为了防止学生用计算机的服务端监控程序,被学生发现用Ctrl+Alt+Del关闭,在Ctrl+Alt+Del对话框中必须隐藏程序。同时,应该隐藏程序在任务栏的按钮。gvsLinux联盟
gvsLinux联盟
  本文结合应用实践,重点向大家介绍在Delphi7.0中可以采用的两种实现屏幕抓图技术的操作方法。gvsLinux联盟
gvsLinux联盟
  程序实现gvsLinux联盟
gvsLinux联盟
  (1)抓取屏幕图像的难点有两个:一是如何夺取屏幕的句柄,二是知道屏幕句柄后如何获取屏幕的图像。Borland公司的设计人员用画布(Tcanvas)对象封装了Windows的大部分图形输出功能,可以通过它以更直观的方式和Windows的屏幕打交道,而不必关心令人头疼的Windows API函数。具体程序如下:gvsLinux联盟
gvsLinux联盟
procedure TForm1.Timer1Timer(Sender:TObject);//抓取屏幕,并保存到Image控件中gvsLinux联盟
vargvsLinux联盟
 Fullscreen:Tbitmap;gvsLinux联盟
 FullscreenCanvas:TCanvas;gvsLinux联盟
 dc:HDC;gvsLinux联盟
begingvsLinux联盟
 Fullscreen:=TBitmap.Create; gvsLinux联盟
 //创建一个BITMAP来存放图象gvsLinux联盟
 Fullscreen.Width:=screen.width;gvsLinux联盟
 Fullscreen.Height:=screen.Height;gvsLinux联盟
 DC:=GetDC(0); //取得屏幕的DC,参数0指的是屏幕gvsLinux联盟
 FullscreenCanvas:=TCanvas.Create; gvsLinux联盟
 //创建一个CANVAS对象gvsLinux联盟
 FullscreenCanvas.Handle:=DC;gvsLinux联盟
 Fullscreen.Canvas.CopyRect(Rect(0,0,screen.Width,screen.Height),gvsLinux联盟
 fullscreenCanvas,Rect(0,0,Screen.Width,Screen.Height)); gvsLinux联盟
 //把整个屏幕复制到BITMAP中gvsLinux联盟
 FullscreenCanvas.Free; gvsLinux联盟
 //释放CANVAS对象gvsLinux联盟
 ReleaseDC(0,DC); //释放DCgvsLinux联盟
 //*******************************gvsLinux联盟
 image1.picture.Bitmap:=fullscreen; //拷贝下的图象赋给IMAGE对象gvsLinux联盟
 image1.Width:=fullscreen.Width;gvsLinux联盟
 image1.Height:=fullscreen.Height;gvsLinux联盟
 fullscreen.free; //释放bitmapgvsLinux联盟
 form1.WindowState:=wsNormal; //复原窗口状态gvsLinux联盟
 form1.show; //显示窗口gvsLinux联盟
 messagebeep(1); //BEEP叫一声,报告图象已经截取好了。gvsLinux联盟
end;
gvsLinux联盟
  (2)Delphi的第三方控件ScreenCapture,它是一个很好的免费的截图控件,可以轻松抓取任意大小(全屏当然行)、屏幕的任何位置,还可以设置所截图像的形状、以及用何种模式截图。下面介绍的是用TcmWindow模式截图,使用非常简单,使用效果可以与著名的抓图软件SnagIt32媲美。gvsLinux联盟
gvsLinux联盟
procedure TForm1.BtnStartClick(Sender:TObject);gvsLinux联盟
begingvsLinux联盟
 ScreenCapture1.start; //开始截图gvsLinux联盟
end;gvsLinux联盟
gvsLinux联盟
 //当截取屏幕成功时,此事件发生gvsLinux联盟
 procedure TForm1.ScreenCapture1Capture(Sender:TObject;Bitmap:TBitmap);gvsLinux联盟
begingvsLinux联盟
 //调整滚动窗口的大小以适应截获图像的大小gvsLinux联盟
 Scrollbox1.HorzScrollBar.Range:= Image1.width;gvsLinux联盟
 Scrollbox1.VertScrollBar.Range:= Image1.height;gvsLinux联盟
end;gvsLinux联盟
gvsLinux联盟
procedure TForm1.FormCreate(Sender:TObject);gvsLinux联盟
begingvsLinux联盟
 //载入entntacp.dll文件gvsLinux联盟
 BtnStart.enabled:= ScreenCapture1.dllavailable;gvsLinux联盟
 //显示版本信息gvsLinux联盟
 caption:= '屏幕抓图软件' + ScreenCapture1.version;gvsLinux联盟
end;gvsLinux联盟
gvsLinux联盟
//当没有足够的内存支持截取屏幕时,此事件发生gvsLinux联盟
procedure TForm1.ScreenCapture1Error(Sender:TObject);gvsLinux联盟
begingvsLinux联盟
 MessageDlg('屏幕截取时发生一个错误!请关闭其他应用程序以获得更多内存资源.', mtError,[mbOK],0);gvsLinux联盟
end;gvsLinux联盟
gvsLinux联盟
 //当用户按“Esc”键,即取消屏幕截取时,此事件发生gvsLinux联盟
procedure TForm1.ScreenCapture1UserCancelled(Sender:TObject);gvsLinux联盟
begingvsLinux联盟
 MessageDlg('用户取消屏幕截取。',mtInformation,[mbOK],0);gvsLinux联盟
end;
gvsLinux联盟
  运行程序,效果如图1和图2所示。gvsLinux联盟
gvsLinux联盟
delphi屏幕抓图效果gvsLinux联盟
图1 运行效果图gvsLinux联盟
实现抓图后的效果图gvsLinux联盟
图2 抓取图像后的效果图gvsLinux联盟
gvsLinux联盟
  结论gvsLinux联盟
gvsLinux联盟
  通过对以上两种程序代码的调试运行,使用第三方控件的方法更易于设计实现,文中的程序代码全部在Win2000和Delphi7.0环境下调试通过。 Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·Delphi中Hash表的使用方法  (2007-02-01 11:44:49)
 ·Delphi中BDE直连方式访问Oracle的问题  (2006-12-07 11:15:03)
 ·怎样在VC、Delphi中使用MySQL ODBC驱动  (2006-11-11 11:13:10)
 ·学习DELPHI程序开发中的几则应用技巧  (2006-10-01 09:12:46)
 ·如何用Delphi 6开发ASP上传组件详解  (2006-10-01 09:11:45)
 ·如何使用Delphi实现无边界窗体的移动  (2006-10-01 09:11:04)
 ·Delphi用拼音首字符序列实现检索功能  (2006-10-01 09:10:14)
 ·Delphi中如何取得系统支持的颜色数  (2006-10-01 09:09:18)
 ·如何用Delphi开发简单的WebMail程序  (2006-10-01 09:08:34)
 ·用Delphi实现BP机、手机短讯 精华篇  (2006-09-25 12:10:54)