Windows桌面共享中一些常见的抓屏技术
a. 在XP下我们可以通过最后的拷贝标志来控制是否拷贝layered window, 只有SRCCPY表示拷贝内容不包含layered window, 如果是SRCCPY | CAPTUREBLT表示拷贝包括Layered window在内的所有窗口。 这个标志在Vista之后的系统(win7/win8),开启DWM的情况下, 已经失效, 因为这种情况下所有的窗口都是layered window.
b. 这种方式的抓屏在 Vista之后, 开启DWM的情况下, 抓屏速度非常慢(30ms +), 具体原因不知道是因为系统没有缓存整个屏幕的数据还是GPU向内存拷贝数据太慢了, 有知道的朋友可以提示下。
a. 涉及到驱动安装, 技术难度大, 系统权限要求也高
b. Win8 上该方案已经失效
a. Hook技术本身就有其复杂性和不稳定性, 尤其是Hook所有进程
b. Vista只有越来越多程序采用D2D/D3D绘制, GDI Hook对这些绘制无能为力。
c. Vista之后UAC打开的情况下, 如果我们的程序权限不够高, Hook不到更高权限的程序。
10. GetWindowDC
该方法和PrintWindow类似,但是它没有PrintWindow的权限问题, 也没有超时问题。
这种抓屏方法在Win7/Win8 DWM打开的情况下抓屏,结果会颠覆我们XP时代的知识, 因为即使窗口被覆盖, 它也可以正确抓取到被覆盖窗口下的内容, WebRTC正是用这种方式来Share Application的。
它的主要问题是有些窗口抓到的内容不包含非客户区,有些窗口比如任务栏的Thumbnail窗口会抓不到内容。
Windows桌面共享中一些常见的抓屏技术的更多相关文章
- Windows抓屏技术
Windows桌面共享中一些常见的抓屏技术 1. BitBlt 我想做Windows开发应该都知道这个API, 它能实现DC间的内容拷贝, 如果我们把源DC指定成Monitor DC或是桌面DC, ...
- 基于GDI和D3D的抓屏技术
GDI32Api.Direct3D屏幕截图 最近因为工作需要,认真研究了一下屏幕截图的方法. 最主要的方法有两种,一.调用windows GDI32 API函数.二.使用DirectX9.0来实现. ...
- 4┃音视频直播系统之浏览器中通过 WebRTC 进行桌面共享
一.共享桌面原理 共享桌面在直播系统中是一个必备功能 共享者:每秒钟抓取多次屏幕,每次抓取的屏幕都与上一次抓取的屏幕做比较,取它们的差值,然后对差值进行压缩:如果是第一次抓屏或切幕的情况,即本次抓取的 ...
- VMware下的Linux系统中Windows的共享目录,不支持创建软连接
[问题] 在编译VMware下的Linux系统对从Windows中共享过来的文件,进行编译的时候,遇到: ln: creating symbolic link XXXXXX : Operation ...
- 在 linux 中利用samba访问windows的共享
只是介绍一些最基本的应用吧, 有些命令可能要求输入用户的密码 1. 首先要安装 samba 这个套件, 若只是访问windows中的共享的话, 可以只装 samba-client 就好了. 2. 在第 ...
- VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录
VMware10中的CentOS6.5命令行安装VMwaretools工具启用windows与虚拟机中Linux系统的共享目录 一.描述 系统描述:win7旗舰版64位系统+VMware Workst ...
- [windows]窗口文件夹中使用常见任务
文件夹中使用常见任务,如截图所示增加红色框部分. 设置步骤: 我的电脑--〉右键--〉属性--〉高级选项--〉性能设置--〉自定义:勾选在文件夹中使用常见任务.
- 盘点Windows 8.1中隐藏着的25个秘密功能
Windows 8.1正式版问世,带来了众多大家早已耳熟能详的“开始按钮”.“分屏显示”等功能.事实上,Windows 8.1贴心的设计细节有很多,多数细节隐藏于系统中某个不起眼的角落,科技网站PC ...
- 在远程桌面服务中配置RD网关直接访问内网
原文地址:http://wangchunhai.blog.51cto.com/225186/1139388/ 远程桌面网关(RD 网关)是一项角色服务,使授权远程用户可以从任何连接到 Internet ...
随机推荐
- [erlang]supervisor(监控树)的重启策略
1. init函数 init() -> {ok, {SupFlags, [ChildSpec,...]}} | ignore. [ChildSpec,...] 是在init之后默认要启动的子进程 ...
- tomcat连接池配置详解
<bean class="org.apache.tomcat.jdbc.pool.PoolProperties"> <property name="ur ...
- Scatterplots 散点图
Simple Scatterplot # Simple Scatterplot attach(mtcars)plot(wt, mpg, main="Scatterplot Example&q ...
- python第二天基础1-1
一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'wupeiqi' print name 二.三元运算 result = 值1 ...
- .net core Entity Framework Core Code First 框架 分层开发
由于之前苦于无法把 Entityframework 跟Web层剥离.找了很久..找到了这个框架..分享给大家.. GitHub 地址:https://github.com/chsakell/dotn ...
- JSON与JAVA数据的转换
1. List集合转换成json代码 List list = new ArrayList(); list.add( "first" ); list.add( "sec ...
- sql server 远程连接不上解决思路
1.数据库是否允许远程连接: 1.1.0登陆SQL Server 2008(windows身份认证),登陆后右击,选择“属性”.左侧选择“安全性”,选中右侧的“SQL Server 和 Windows ...
- SRETAN
SRETAN (sretan.pas/c/cpp) 题目描述 4和7是幸运数字,输入k,输出第k个只含有4和7的数. 输入格式 一行一个数k 输出格式 一行一个数表示答案 样例输入 3 样例输出 44 ...
- Java读取文件的几种方式
package com.mesopotamia.test; import java.io.BufferedReader; import java.io.ByteArrayInputStream; im ...
- 如何使用NodeJs来监听文件变化
1.前言 在我们调试修改代码的时候,每修改一次代码,哪怕只是很小的修改,我们都需要手动重新build文件,然后再运行代码,看修改的效果,这样的效率特别低,对于开发者来说简直不能忍. 2.构建自动编译工 ...