实现屏幕监控的大体思路

屏幕监控简单说就是对进程的当前桌面进行截屏存成位图,然后将此位图数据传输到远程。

对桌面进行截图需要通过一系列Windows GDI API来完成的。

首先通过CreateDC,CreateCompatibleDC,CreateCompatibleBitmap,SelectObject等API将“DISPLAY”驱动器的设备上下文与位图句柄关联起来。

然后通过GetStockObject,GetDC,SelectPalette等API处理调色板。

最后在一个循环中通过GetDIBits将所有水平线像素数据存入到缓冲区中去。

这个缓冲区就是我们想要的位图数据,只要将这些数据组织一下,就可以当成位图显示出来了。通过连续传输位图,就可以实时对远程屏幕进行监控了。

 

//===================================================================================================================================

DC(Device Context)设备描述表,又称 设备上下文
设备描述表是一个定义一组图形对象及其属性、影响输出的图形方式(数据)结构。windows提供设备描述表,用于应用程序和 物理设备之间进行交互,从而提供了应用程序设计的平台无关性。设备描述表又称为 设备上下文,或者设备环境。
设备描述表是一种 数据结构,它包括了一个设备(如显示器和打印机)的绘制属性相关的信息。所有的绘制操作通过设备描述表进行。设备描述表与大多 WIN32结构不同,应用程序不能直接访问设备描述表,只能由各种相关API函数通过设备描述表的 句柄间接访问该结构。
 
句柄
句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个 指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。

//====================================================================================================================================

CreateDC():
    函数功能:该函数通过使用指定的名字为一个设备创建 设备上下文环境。
    函数原型:HDC CreateDC(LPCTSTR lpszDrive, LPCTSTR lpszDevice, LPCTSTR lpszOutput, CONST DEVMODE *lplnitData);
CreateCompatibleDC() 
   函数功能:该函数创建一个与指定设备兼容的内存 设备上下文环境(DC)。通过GetDc()获取的HDC直接与相关设备沟通,而本函数创建的DC,则是与内存中的一个表面相关联

   函数原型:HDC CreateCompatibleDC(HDC hdc);

CreateCompatibleBitmap():

  函数功能:该函数创建与指定的设备环境相关的设备兼容的位图。

  函数原型:HBITMAP CreateCompatibleBitmap(HDC hdc,int nWidth,int nHeight);
SelectObject()
   函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。
   函数原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj)
GetStockObject()
   函数功能:该函数检索预定义的备用笔、刷子、 字体或者 调色板的句柄。 
   函数原型:   HGDIOBJ GetStockObject(int fnObject);
GetDC()
    函数功能:该函数检索一指定窗口的客户区域或整个屏幕的显示 设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图 。
    函数原型:HDC GetDC(HWND hWnd);
SelectPalette()
   函数功能:该函数选择指定的逻辑调色板到一个设备环境中。
   函数原型:HPALETTE SelectPalette(HDC hdc, HPALETTE hpal, BOOL bForceBackground);
GetDIBits()
   函数功能:GetDIBits函数获取指定兼容位图的位,然后将其作一个DIB—设备无关位图(Device-Independent Bitmap)使用的指定格式复制到一个缓冲区中。
   函数原型:int GetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, LPVOID lpvBits, LPBITMAPINFO lpbi, UINT uUsage);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值