其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

Delphi屏幕抓图技术的实现


发布日期:2021年03月02日
 
Delphi屏幕抓图技术的实现
摘 要本文以Delphi作为开发平台给出了网络监控软件中的两种屏幕抓图技术的设计方法和步骤介绍了教师在计算机机房内教学时如何监控学生计算机显示器上的画面以保证教学的质量和效果

引言

随着网络技术的飞速发展计算机网络在各高等院校教学中的使用已非常普遍但是我们发现一个问题在教学的过程中由于老师是面对着学生而背对着学生计算机的显示器不能随时查看学生计算机显示器上的内容所以有的学生在教学中偷玩游戏影响了教学的质量和效果因此设计一款网络监控软件监控学生计算机十分必要为了实现这一目的此系统应具有以下功能

)教师用机可以循环显示学生计算机的显示器上的画面

)教师用机可以动态显示某一学生计算机的显示器上的画面

)教师用机可以对学生用计算机发出警告信息和控制信息

)学生用计算机开机自动运行服务端监控程序

)为了防止学生用计算机的服务端监控程序被学生发现用Ctrl+Alt+Del关闭在Ctrl+Alt+Del对话框中必须隐藏程序同时应该隐藏程序在任务栏的按钮

本文结合应用实践重点向大家介绍在Delphi中可以采用的两种实现屏幕抓图技术的操作方法

程序实现

)抓取屏幕图像的难点有两个一是如何夺取屏幕的句柄二是知道屏幕句柄后如何获取屏幕的图像Borland公司的设计人员用画布(Tcanvas)对象封装了Windows的大部分图形输出功能可以通过它以更直观的方式和Windows的屏幕打交道而不必关心令人头疼的Windows API函数具体程序如下

procedure TFormTimerTimer(SenderTObject)//抓取屏幕并保存到Image控件中

var

FullscreenTbitmap

FullscreenCanvasTCanvas

dcHDC

begin

Fullscreen=TBitmapCreate

//创建一个BITMAP来存放图象

FullscreenWidth=screenwidth

FullscreenHeight=screenHeight

DC=GetDC() //取得屏幕的DC参数指的是屏幕

FullscreenCanvas=TCanvasCreate

//创建一个CANVAS对象

FullscreenCanvasHandle=DC

FullscreenCanvasCopyRect(Rect(screenWidthscreenHeight)

fullscreenCanvasRect(ScreenWidthScreenHeight))

//把整个屏幕复制到BITMAP中

FullscreenCanvasFree

//释放CANVAS对象

ReleaseDC(DC) //释放DC

//*******************************

imagepictureBitmap=fullscreen //拷贝下的图象赋给IMAGE对象

imageWidth=fullscreenWidth

imageHeight=fullscreenHeight

fullscreenfree //释放bitmap

formWindowState=wsNormal //复原窗口状态

formshow //显示窗口

messagebeep() //BEEP叫一声报告图象已经截取好了

end

)Delphi的第三方控件ScreenCapture它是一个很好的免费的截图控件可以轻松抓取任意大小(全屏当然行)屏幕的任何位置还可以设置所截图像的形状以及用何种模式截图下面介绍的是用TcmWindow模式截图使用非常简单使用效果可以与着名的抓图软件SnagIt媲美

procedure TFormBtnStartClick(SenderTObject)

begin

ScreenCapturestart //开始截图

end

//当截取屏幕成功时此事件发生

procedure TFormScreenCaptureCapture(SenderTObjectBitmapTBitmap)

begin

//调整滚动窗口的大小以适应截获图像的大小

ScrollboxHorzScrollBarRange= Imagewidth

ScrollboxVertScrollBarRange= Imageheight

end

procedure TFormFormCreate(SenderTObject)

begin

//载入entntacpdll文件

BtnStartenabled= ScreenCapturedllavailable

//显示版本信息

caption= 屏幕抓图软件 + ScreenCaptureversion

end

//当没有足够的内存支持截取屏幕时此事件发生

procedure TFormScreenCaptureError(SenderTObject)

begin

MessageDlg(屏幕截取时发生一个错误!请关闭其他应用程序以获得更多内存资源mtError[mbOK])

end

//当用户按Esc即取消屏幕截取时此事件发生

procedure TFormScreenCaptureUserCancelled(SenderTObject)

begin

MessageDlg(用户取消屏幕截取mtInformation[mbOK])

end

运行程序效果如图和图所示

运行效果图

抓取图像后的效果图

结论

通过对以上两种程序代码的调试运行使用第三方控件的方法更易于设计实现文中的程序代码全部在Win和Delphi环境下调试通过

               

上一篇:用Delphi进行NT、2000、2003服务程序的调试

下一篇:PowerBuilder编程技巧四则[2]