1. 程式人生 > >Radmin的抓屏和顯屏API程式碼部分分析

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函式

某網友的分析,我還不知如何分析