当前位置: 首页 > news >正文

电子商务网站建设与管理课后规划一个电子商务网站

电子商务网站建设与管理课后,规划一个电子商务网站,怎么制作浏览器网页,微信app下载安装2024最新版文章目录 Windows反截屏开发实现1. SetWindowDisplayAffinity2. 反截屏系统3. 总结 Windows反截屏开发实现 最近在我们云桌面中需要做到反截屏能力,所谓反截屏就是我们无法通过截图软件(微信,QQ,截图等程序)截取桌面的…

文章目录

  • Windows反截屏开发实现
    • 1. SetWindowDisplayAffinity
    • 2. 反截屏系统
    • 3. 总结

Windows反截屏开发实现

最近在我们云桌面中需要做到反截屏能力,所谓反截屏就是我们无法通过截图软件(微信,QQ,截图等程序)截取桌面的内容。在Windows下面我们通过如下步骤来截图:

  • 通过GetDC或者CreateDC来获取DC。
  • 通过CreateCompatibleDC创建内存DC。
  • 通过BitBlt/StretchBlt将屏幕DC的内容拷贝到内存DC中。
  • 我们将DC的位图提取出来,就完成了截图。

要做到反截屏,一般有两种方式来实现:

  1. 通过设置属性,是的第三方软件无法获取到窗口的内容。
  2. 对截图的行为进行拦截,例如CreateCompatibleDC或者BitBlt/StretchBlt等。

接下来分别对两种情况来进行处理。

1. SetWindowDisplayAffinity

SetWindowDisplayAffinity该函数设置窗口的显示属性,该函数如下:

BOOL SetWindowDisplayAffinity(HWND  hWnd,DWORD dwAffinity
);

对于dwAffinity可以取值如下:

  • WDA_MONITOR设置窗口只在显示器上面显示,我们从内存DC中那窗口的内容的话得到的是空的。
  • WDA_NONE移除只在显示器上面显示的标记属性。

其实还有一个标记WDA_EXCLUDEFROMCAPTURE专门是为截图设计的,当设置这个标记的时候,就会导致该窗口截图的时候透明。

该函数是在DWM窗口合成中完成的,因此需要在DWM开启的情况下才能生效;我们可以大致实现如下:

void CWindowAffinityDlg::OnBnClickedButtonWdaMonitor()
{WCHAR wszWndName[MAX_PATH] = { 0 };GetDlgItemTextW(IDC_EDIT_WND_NAME, wszWndName, _countof(wszWndName));HWND hWnd = ::FindWindowW(NULL, wszWndName);if (hWnd == NULL){return;}SetWindowDisplayAffinity(hWnd, WDA_MONITOR);
}

在正常的情况下,我们看到的截图效果如下:
在这里插入图片描述

设置WDA_MONITOR之后,我们的效果如下:
在这里插入图片描述

如果设置WDA_EXCLUDEFROMCAPTURE,截图的效果如下:

在这里插入图片描述

可以看到,通过SetWindowDisplayAffinity可以对当前窗口进行处理,防止被别人截图。但是SetWindowDisplayAffinity有一个限制,只能够设置本进程的窗口,无法设置其他进程窗口,例如我们无法做到防止截图软件去截取桌面其他窗口的内容。

但是这对于我们的云桌面客户端来说是不影响的,因为云桌面客户端只要禁止我们的窗口被其他程序截屏就行了。

2. 反截屏系统

如果我们需要对其他窗口也进行拦截那么上面的方案就不行了,例如我们需要做到禁止微信截取所有图片,防止信息泄露,那么就需要使用另外方案了。

我们需要对CreateCompatibleDC或者BitBlt/StretchBlt做处理,例如:

BOOL BitBlt(HDC   hdc,int   x,int   y,int   cx,int   cy,HDC   hdcSrc,int   x1,int   y1,DWORD rop
);

BitBlt函数中,我们hdcSrc表示了原DC的内容,因此我们只需要将原DC的内容进行清理就可以了,如下:

HBRUSH hBrush = CreateSolidBrush(0);
if (hBrush != NULL)
{GetWindowRect(hWnd, &Rect);FillRect(hdc, &Rect, hBrush);DeleteObject(hBrush);
}

我们可以看到实现效果,针对Windows自带的截图如下,截图如下:

在这里插入图片描述

微信截图如下(截取到的整个桌面为黑色):
在这里插入图片描述

QQ截图效果如下(截取到的整个桌面为黑色):

在这里插入图片描述

3. 总结

上面我们提供了两种反截屏的方式:

  • 如果我们仅仅需要对自己的窗口进行反截屏,那么使用SetWindowDisplayAffinity设置好窗口的属性就可以了。
  • 如果我们需要对系统桌面进行反截屏,这种情况一般是防止桌面内容通过截屏被泄露,这样就需要使用我们对截屏行为进行拦截和处理了。
http://www.yayakq.cn/news/456191/

相关文章:

  • 上海松江做网站公司wordpress persona
  • 网页创建网站o2o的四种营销模式
  • 松阳县建设局网站公示哪个网站可以学做标书
  • 南宁做网站seo学院网站源码
  • 徐州免费建站搭建网站免费
  • 中国做的比较好的网站设计公司有哪些wordpress wp config
  • 厦门h5建站广告设计logo标志
  • 门户网站建设思路谁有人和兽做的网站?
  • 大渡口网站建设店铺设计费用怎么收费
  • 写作网站投稿哪个好文化建设设计网站
  • 建设大型网站设计公司我自己的网站怎么做关键词优化
  • 搭建一个网站的基本流程网站微信支付怎么做的
  • 青岛建立网站电话物流信息平台网站建设
  • 做双语网站用什么cms系统好十堰小程序开发
  • 成都外贸网站建设费用权重高的博客网站
  • 网站如何百度收入oa系统登录界面
  • 渭南网站建设电话论坛平台主要产品
  • 网站目录文件夹页面设计存在的问题
  • 外贸网站建设 双语网站建设天津建设工程投标信息
  • wordpress数组转字符串网站html标签如何优化
  • 响应式网站seowordpress能多人登录
  • 宁夏网站seo自媒体培训
  • 重庆建设空调网站北京市新闻
  • 推广网站制作怎么做seo优化杭州
  • 建网站做商城个体户资质可以服务营销理论
  • 公司招商型网站建设项目管理的软件有哪些
  • 公司网站首页模板hui怎么做网站
  • wordpress站点做网站需要那些东西
  • 关键词在线挖掘网站个人注册域名和公司注册域名区别
  • 我们网站在那里登陆后台系统管理照片一键生成视频的软件