您的位置:首页 > 编程语言

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

2007-06-25 09:29 351 查看
分析了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函数

某网友的分析,我还不知如何分析
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: