Radmin的抓屏和显屏API代码部分分析

分析了Radmin的抓屏和显屏API代码,抓屏它采用的是逐行扫描,显屏它采用的是全屏显示。就是不知道他使用的什么压缩,他发送时好像没有用内存XOR运算发送不同的数据,但不知道他使用什么压缩方法发送的。

r_server
  SRCCOPY     = $00CC0020;     { dest = source       


function CreateDCA(lpszDriver, lpszDevice, lpszOutput: PAnsiChar;
  lpdvmInit: PDeviceModeA): HDC; stdcall;

lpszDriver 'DISPLAY'
lpszDevice nil
lpszOutput nil
lpdvmInit nil

function GetDeviceCaps(DC: HDC; Index: Integer): Integer; stdcall;

DC CreateDCA 的返回值
Index RASTERCAPS    = 38;    { Bitblt capabilities    

function CreateCompatibleDC(DC: HDC): HDC; stdcall;

DC CreateDCA 的返回值

function GetDeviceCaps(DC: HDC; Index: Integer): Integer; stdcall;

DC CreateDCA 的返回值
Index HORZRES       = 8;     { Horizontal width in pixels       

function GetDeviceCaps(DC: HDC; Index: Integer): Integer; stdcall;

DC CreateDCA 的返回值
Index VERTRES       = 10;    { Vertical height in pixels      

function CreateCompatibleBitmap(DC: HDC; Width, Height: Integer): HBITMAP; stdcall;

DC CreateDCA 的返回值
Width GetDeviceCaps HORZRES的返回值
Height 0x00000001

function GetObjectA(p1: HGDIOBJ; p2: Integer; p3: Pointer): Integer; stdcall;

p1 CreateCompatibleBitmap 的返回值
p2 ?24
p3 ?

function GetDeviceCaps(DC: HDC; Index: Integer): Integer; stdcall;

DC CreateCompatibleDC 的返回值
Index RASTERCAPS    = 38;    { Bitblt capabilities    


function GetDeviceCaps(DC: HDC; Index: Integer): Integer; stdcall;

DC CreateCompatibleDC 的返回值
Index BITSPIXEL     = 12;    { Number of bits per pixel    

function CreateBitmap(Width, Height: Integer; Planes, BitCount: Longint;
  Bits: Pointer): HBITMAP; stdcall;

Width  5
Height  1
Planes  1
BitCount 10
Bits  0

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC CreateCompatibleDC 的返回值
p2 CreateBitmap 的返回值

function SetPixel(DC: HDC; X, Y: Integer; Color: COLORREF): COLORREF; stdcall;

DC CreateCompatibleDC 的返回值
X 0x00000000
Y 0x00000000
Color 0x000000FF

function GetBitmapBits(Bitmap: HBITMAP; Count: Longint;
  Bits: Pointer): Longint; stdcall;

Bitmap CreateBitmap 的返回值
Count 0x00000002
Bits

function SetPixel(DC: HDC; X, Y: Integer; Color: COLORREF): COLORREF; stdcall;

DC CreateCompatibleDC 的返回值
X 0x00000000
Y 0x00000000
Color 0x0000FF00

function GetBitmapBits(Bitmap: HBITMAP; Count: Longint;
  Bits: Pointer): Longint; stdcall;

Bitmap CreateBitmap 的返回值
Count 0x00000002
Bits 

function SetPixel(DC: HDC; X, Y: Integer; Color: COLORREF): COLORREF; stdcall;

DC CreateCompatibleDC 的返回值
X 0x00000000
Y 0x00000000
Color 0x00FF0000

function GetBitmapBits(Bitmap: HBITMAP; Count: Longint;
  Bits: Pointer): Longint; stdcall;

Bitmap CreateBitmap 的返回值
Count 0x00000002
Bits 

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC CreateCompatibleDC 的返回值
p2 SelectObject 的返回值

function DeleteObject(p1: HGDIOBJ): BOOL; stdcall;

p1 CreateBitmap 的返回值

function CreateCompatibleBitmap(DC: HDC; Width, Height: Integer): HBITMAP; stdcall;

DC CreateDCA 的返回值
Width 0x00000400
Height 0x00000015

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC CreateCompatibleDC 的返回值
p2 CreateCompatibleBitmap 的返回值


function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC;
  XSrc, YSrc: Integer; Rop: DWORD): BOOL; stdcall;

DestDC CreateCompatibleDC 的返回值
X 0x00000000
Y 0x00000000
Width 0x00000400
Height 0x00000001 变
SrcDC CreateDCA 的返回值
XSrc 0x00000000 变
YSrc 0x0000000F 变
Rop SRCCOPY 

function GetDIBits(DC: HDC; Bitmap: HBitmap; StartScan, NumScans: UINT;
  Bits: Pointer; var BitInfo: TBitmapInfo; Usage: UINT): Integer; stdcall;

DC  CreateCompatibleDC 的返回值
Bitmap  CreateCompatibleBitmap 的返回值
StartScan 0x00000000
NumScans 0x00000001
Bits   
BitInfo  
Usage  0x00000000

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC CreateCompatibleDC 的返回值
p2 CreateCompatibleBitmap 的返回值

function DeleteDC(DC: HDC): BOOL; stdcall;

DC CreateDCA 的返回值

function DeleteDC(DC: HDC): BOOL; stdcall;

DC CreateCompatibleDC 的返回值

function DeleteObject(p1: HGDIOBJ): BOOL; stdcall;

p1 SelectObject 的返回值

radmin

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC
p2

function ExtCreateRegion(XForm: PXForm; Count: DWORD; const RgnData: TRgnData): HRGN; stdcall;

XForm  nil 单元转换
Count  数据大小
RgnData  数据

function SelectClipRgn(DC: HDC; Region: HRGN): Integer; stdcall; -> ->

DC  SelectObject 的DC
Region  ExtCreateRegion 的返回值
返回值  COMPLEXREGION = 3

function SetDIBitsToDevice(DC: HDC; DestX, DestY: Integer; Width, Height: DWORD;
  SrcX, SrcY: Integer; nStartScan, NumScans: UINT; Bits: Pointer;
  var BitsInfo: TBitmapInfo; Usage: UINT): Integer; stdcall;

DC  SelectObject 的DC
DestX  0 服务端屏幕X
DestY  0 服务端屏幕Y
Width  $320 服务端屏幕Width
Height  $258 服务端屏幕Height
SrcX  0
SrcY  0
nStartScan 0
NumScans $258
Bits  数据?
BitsInfo
Usage   不知道DIB_RGB_COLORS

function SelectClipRgn(DC: HDC; Region: HRGN): Integer; stdcall; -> 

DC  SelectObject 的DC
Region  0
返回值  SIMPLEREGION = 2

function DeleteObject(p1: HGDIOBJ): BOOL; stdcall;

p1  ExtCreateRegion 的返回值

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC  原 SelectObject 的DC 
p2  上一个 SelectObject 的返回值

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC  原 SelectObject 的DC
p2  上一个 SelectObject 的返回值

普通模式

function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC;
  XSrc, YSrc: Integer; Rop: DWORD): BOOL; stdcall;

DestDC  
X  0 服务端屏幕X
Y  0 服务端屏幕Y
Width  $320 服务端屏幕Width
Height  $258 服务端屏幕Height
SrcDC  上一个 SelectObject 的返回值 = 上一个 SelectObject 的DC= 原 SelectObject 的DC
XSrc  0
YSrc  0
Rop  SRCCOPY


伸拉模式

function SetStretchBltMode(DC: HDC; StretchMode: Integer): Integer; stdcall;

DC
StretchMode

function StretchBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC;
  XSrc, YSrc, SrcWidth, SrcHeight: Integer; Rop: DWORD): BOOL; stdcall;

DestDC
X
Y
Width
Height
SrcDC
XSrc
YSrc
SrcWidth
SrcHeight
Rop

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC  上一个 SelectObject 的返回值 = 上一个 SelectObject 的DC= 原 SelectObject 的DC
p2  上一个 SelectObject 的返回值

上面是Radmin和R_server所用抓屏和显屏的API函数

某网友的分析,我还不知如何分析 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值