摘 要:本文以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;

结论

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

http://blog.sina.com.cn/s/blog_562349090100zkvs.html

Delphi 屏幕抓图技术的实现的更多相关文章

  1. HyperSnap(屏幕抓图工具) 8.11.03 官方简体中文特别版

    软件名称:屏幕抓图工具HyperSnap 软件分类:图像捕捉运行环境:WinXP/Win2003/Vista/Win7/Win8/WinALL软件语言:简体中文授权方式:免费软件软件大小:12462K ...

  2. Android 开发中的屏幕适配技术详解

    本文主要介绍Android开发中比较头疼繁琐的一个问题-屏幕适配问题.主要从适配原因.基本核心概念.适配方法等方面介详细 介绍从而是的深入或者进一步对Android屏幕适配技术的掌握和理解. 真题园网 ...

  3. Delphi 线程同步技术(转)

    上次跟大家分享了线程的标准代码,其实在线程的使用中最重要的是线程的同步问题,如果你在使用线程后,发现你的界面经常被卡死,或者无法显示出来,显示混乱,你的使用的变量值老是不按预想的变化,结果往往出乎意料 ...

  4. Delphi中停靠技术的实现

    随着软件技术的不断进步,软件界面也越来越美观,操作也越来越方便.综观市面上比较专业的各种软件,我们会发现大部分都提供窗体停靠的功能,特别象工具软件,基本上都或多或少有停靠功能.自然,Delphi也支持 ...

  5. Delphi 中DataSnap技术网摘

    Delphi2010中DataSnap技术网摘 一.为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7 ...

  6. delphi 屏幕截屏

    function GetScreenAll: TBitmap; // 截取全屏 var C: TCanvas; begin C := TCanvas.Create; result := TBitmap ...

  7. Delphi COM编程技术三类型库(库文件中的工具栏,很全)

    在COM组件的使用和开发过程中经常需要获取有关组件的信息.而COM组件以二进制代码的形式发布,如果不借助特定的工具这些相关信息将难以被获取.通过访问类型库就可以查看COM组件的信息. 一.类型库的基础 ...

  8. C#软件开发实例.个人定制自己的屏幕抓图工具(八)加入了截图功能键盘

    章文件夹 (一)功能概览 (二)创建项目.注冊热键.显示截图主窗体 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)加入配置管理功能 (七)加入放大镜的功 ...

  9. delphi 数据库技术沉浮录--谨给成为历史的BDE

    2014年9月,delphi xe7 出来了,这次在数据库技术方面,彻底抛掉了从1995 年 delphi 1.0 就自带的(Borland Database Engine)数据库访问技术.从而宣告了 ...

随机推荐

  1. wpf SnapsToDevicePixels

    原文:wpf SnapsToDevicePixels  可以在您的根元素上将此属性设为 true,以在整个 UI 上启用像素对齐呈现. 对于运行在大于 96 每英寸点数 (dpi) 的设备,像素对 ...

  2. js声明json数据,打印json数据,遍历json数据,转换json数据为数组

    1.js声明json数据: 2.打印json数据: 3.遍历json数据: 4.转换json数据为数组; //声明JSON var json = {}; json.a = 1; //第一种赋值方式(仿 ...

  3. Groovy&Gradle总结

    欢迎大家加入QQ群一起讨论: 489873144(android格调小窝) 我的github地址:https://github.com/jeasonlzy 0x01 Groovy 概述 Groovy ...

  4. Hexo里如何添加广告

    前期先用Hexo做个人网站,模板可以用https://github.com/828768/maupassant-hexo,关于如何加入广告,可以看一下https://sobaigu.com/hexo- ...

  5. andriod 实现新浪、QQ场地、朋友微信圈、微信朋友分享功能

    前言:在自己的学习过程中的一些操作,分享一些理解. 下面将说明什么: 下载链接:http://download.csdn.net/detail/u014608640/7490357 首先.我们须要去S ...

  6. WPF MeshGeometry3D

    说说 MeshGeometry3D 里 常用的 四个属性. 先看看 MSDN 的 简介 先说说 Positions,介绍说 是顶点位置的集合,什么意思,看张图片. 这张简单描述了一个三位坐标系,里面有 ...

  7. SQL Server 统计某个月周末的天数

    ---注意:这里统计的周末包括周5,周6,但不包括周日ALTER FUNCTION [dbo].[GetWeekDaysByMonth] ( @Year INT, @Month INT, @Day I ...

  8. Java内部类——学习笔记

    参考:http://blog.csdn.net/aaronsi/article/details/187322 和 http://openhome.cc/Gossip/JavaGossip-V1/Inn ...

  9. 特征价格(Hedonic price)

    特征价格法,又称 Hedonic 模型法和效用估价法,认为房地产由众多不同的特征组成,而房地产价格是由所有特征带给人们的效用决定的.由于各特征的数量及组合方式不同,使得房地产的价格产生差异.因此,如能 ...

  10. Windows 窗体设计器(Windows Forms Designer)入门

      Visual Studio 2010 更新:2010 年 9 月 Windows 窗体设计器提供多个用于生成 Windows 窗体应用程序的工具. 本演练阐释如何使用设计器提供的各种工具生成应用程 ...