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

对桌面进行截图需要通过一系列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);

实现屏幕监控的大体思路相关推荐

  1. 基于JAVA的远程屏幕监控系统

    摘 要 远程屏幕监控系统在生活中是很常见的,学校机房的机房管理系统.PC版QQ的远程演示功能等都属于远程屏幕监控系统.监控系统的原理是通过客户端不断的截取屏幕发送到服务器端,服务器端进而将画面呈现出来 ...

  2. java远程监控系统代码_[源码和文档分享]基于JAVA的远程屏幕监控系统

    远程屏幕监控系统在生活中是很常见的,学校机房的机房管理系统.PC版QQ的远程演示功能等都属于远程屏幕监控系统.监控系统的原理是通过客户端不断的截取屏幕发送到服务器端,服务器端进而将画面呈现出来的过程. ...

  3. gh0st源码分析:屏幕监控

    这两天一直看gh0st源码,看得也是一头雾水,下面就分析一下屏幕监控的通信过程,对屏幕扫描算法以及绘图方面就不分析了,因为我也不懂.写的有点乱,就当作个笔记了. 首先从控制端按下屏幕监控选项开始,这时 ...

  4. 屏幕监控中捕获鼠标位置信息

    server端: 在server.h中声明:void DispatchWMMessage(char *szString); server.c中添加  void DispatchWMMessage(ch ...

  5. 利用Http实现屏幕监控

    使用了idhttp实现了远程屏幕监控,可以网页使用也可以客户端使用. 文件:url80.ctfile.com/f/25127180-733994640-f168b8?p=551685 (访问密码: 5 ...

  6. 如何在SYSTEM权限下实现屏幕监控

    屏幕监控是远控软件的基本功能之一. 版权声明 作者:iprowq 现在很多远控程序的服务端通常为DLL形式,通过远程线程注入等方法插入到services.svchost等SYSTEM权限的进程中去,而 ...

  7. IP-guard屏幕监控,违规操作全记录

    审计终端操作,溯源泄密行为,我们需要详尽记录终端的各项行为,以便管理员能够及时发现风险以及异常操作,然而仅仅通过文字记录已经不能满足企业的审计需求,一些企业在进行严格的日志审计时,常常会结合屏幕记录一 ...

  8. Node.JS实战34:远程屏幕监控?可以的

    是否想做一个远程系统屏幕监控功能?这是个有意思的功能. Node.JS可以实现,而且很方便. 目标效果: 在网页中实时查看系统屏幕内容. 实现原理: 1.用express实现服务器: 2.当访问来临时 ...

  9. 从零开始做远控 第五篇 屏幕监控

    如果你从没看过这系列教程请点击:从零开始做远控 简介篇 屏幕监控: 我们来到进阶课程了,我们这一节主要是讲客户端的,我们将会编写从客户端截取屏幕,然后用JEPG压缩它,最后发给服务端,形成一个动态画面 ...

最新文章

  1. 图片基础知识梳理(3) BitmapBitmapFactory 解析
  2. C# EF 基础操作
  3. 人工智能恶意使用报告:预测、预防和缓解
  4. js中typeof用法详细介绍
  5. chrome浏览器下“多余”的2px
  6. 【PostMan】1、Postman 发送json格式请求
  7. kuangbin专题十六 KMP扩展KMP HDU3068 最长回文
  8. 千万级大表如何更快速的创建索引_分享一份生产环境mysql数据库大表归档方案,值得收藏...
  9. CentOS 7.6 RPM方式安装Oracle19c的过程
  10. java发送html附件_Java发送邮件(图片、附件、HTML)
  11. java 盘符 系统_JAVA小白预备内容
  12. 概率论综述(题型篇)
  13. MDT修改部署时的背景图
  14. 蝶形算法(Butterfly Algorithm)未更完
  15. hprose-php教程,PHP RPC框架 hprose 上手玩玩
  16. Java 类对象基础知识--科普
  17. Excel 调用百度翻译API进行翻译
  18. DM数据库安装过程--基于NeoKylin操作系统详解
  19. 中国石油大学《混凝土》第二阶段在线作业
  20. 多项式与快速傅立叶变换

热门文章

  1. LabVIEW通讯-TCP
  2. 抢票原理通俗解释,​候补购票是什么?你还在交智商税吗?
  3. Java String字符串长度不足指定位数补0
  4. java 天数计算日期_Java 计算日期间天数与日期推算等操作
  5. DIY M328晶体管测试仪 挖坑 填坑
  6. 入门必学 | R语言数据的独立性,正态性及方差齐性检验
  7. Java核心技术之Comparator和Comparable在排序中的应用
  8. 强迫症 之 Android Studio 格式化 XML
  9. CentOS8下Mosquitto安装使用指南
  10. Vertx中的verticle详解