DFMirage Driver delphi 演示实例(高效率抓屏方式)

本文档介绍了一个使用DFMirage Mirror Driver进行高效屏幕捕获的Delphi示例。该驱动程序能够实时捕获屏幕变化,适用于远程监控和屏幕录制。示例代码是从TightVNC的C++代码翻译成Delphi的,便于不熟悉C++的Delphi开发者使用。
摘要由CSDN通过智能技术生成

DFMirage Mirror Driver是TightVNC用来抓屏的驱动,可以获取屏幕的变化区域,效率非常高。这个技术非常适合做远程监控、屏幕录制之类的软件。由于TigntVNC是C++的,对于不熟悉C++的DELPHI fans会有点麻烦。这个实例就是参照TightVNC中的代码翻译过来的,希望大家能用得上。

 

使用前请先安装驱动:
http://demoforge.com/dfmirage.htm

{
DFMirage Driver class for delphi

DFMirage is "cutting edge" video driver mirroring technology for the Windows NT OS family.
It is a driver for a virtual video device managed at the DDML level of the graphics system
that exactly mirrors the drawing operations of one or more physical display devices.
A detailed explanation of how a mirroring video driver works may be found in the Windows DDK.

more information by
http://demoforge.com/dfmirage.htm

by heroyin
E-MAIL: heroyin888@sina.com
}
unit VideoDriver;

interface

uses
  SysUtils, Windows, Graphics;

const
  ESC_QVI  =  1026;

  MAP1  =  1030;
  UNMAP1  =  1031;
  _TESTMAPPED  = 1051;

  MAXCHANGES_BUF = 20000;

const

  dmf_dfo_IGNORE    = 0;
  dmf_dfo_FROM_SCREEN = 1;
  dmf_dfo_FROM_DIB  = 2;
  dmf_dfo_TO_SCREEN  = 3;

  dmf_dfo_SCREEN_SCREEN  = 11;
  dmf_dfo_BLIT    = 12;
  dmf_dfo_SOLIDFILL  = 13;
  dmf_dfo_BLEND    = 14;
  dmf_dfo_TRANS    = 15;
  dmf_dfo_PLG      = 17;
  dmf_dfo_TEXTOUT    = 18;

  dmf_dfo_Ptr_Engage  = 48;  // point is used with this record
  dmf_dfo_Ptr_Avert  = 49;

  // 1.0.9.0
  // mode-assert notifications to manifest PDEV limbo status
  dmf_dfn_assert_on  = 64;  // DrvAssert(TRUE): PDEV reenabled
  dmf_dfn_assert_off  = 65;  // DrvAssert(FALSE): PDEV disabled


const

  CDS_UPDATEREGISTRY = $00000001;
  CDS_TEST          = $00000002;
  CDS_FULLSCREEN     = $00000004;
  CDS_GLOBAL         = $00000008;
  CDS_SET_PRIMARY    = $00000010;
  CDS_RESET          = $40000000;
  CDS_SETRECT        = $20000000;
  CDS_NORESET        = $10000000;

type
{
typedef BOOL (WINAPI* pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD);
typedef LONG (WINAPI* pChangeDisplaySettingsEx)(LPCTSTR, LPDEVMODE, HWND, DWORD, LPVOID);
}
//**********

  PCHANGES_RECORD = ^CHANGES_RECORD;
  CHANGES_RECORD = record
    _type: ULONG;  //screen_to_screen, blit, newcache,oldcache
    rect: TRECT;
    origrect: TRECT;
    point: TPOINT;
    color: ULONG; //number used in cache array
    refcolor: ULONG; //slot used to pase btimap data
  end;

  PCHANGES_BUF = ^CHANGES_BUF;
  CHANGES_BUF = record
     counter: ULONG;
    pointrect: array [0..MAXCHANGES_BUF-1] of CHANGES_RECORD;
  end;

  PGETCHANGESBUF = ^GETCHANGESBUF;
  GETCHANGESBUF = record
    buffer: PCHANGES_BUF;
    Userbuffer: Pointer;
  end;

const
  DMF_PROTO_VER_CURRENT = (1 shl 24) or (2 shl 16) or (0 shl 8) or 0;
  DMF_PROTO_VER_MINCOMPAT = (0 shl 24) or (9 shl 16) or (0 shl 8) or 1;


type
  Esc_dmf_Qvi_IN = record
    cbSize: ULONG;
    app_actual_version: ULONG;
    display_minreq_version: ULONG;
    connect_options: ULONG;    // reserved. must be 0.
  end;

const
  esc_qvi_prod_name_max  = 16;


   ESC_QVI_PROD_MIRAGE  = 'MIRAGE';

type

  Esc_dmf_Qvi_OUT = recor

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值