大家随意讨论,不管对的错的,欢迎大家踊跃发言。我的想法是:屏幕上显示的所有东西,肯定在系统显示驱动层有一块区域内保存着。
如果我能控制这块区域的数据存取的话,是不是就能控制截屏功能了。我对截屏的技术不是很熟悉,显示驱动也不是很懂,只是觉得文件驱动方面可以有文件过滤驱动存在,
那么显示驱动方面有没有相应的过滤驱动存在,有的话能不能实现上面的构想。一点陋见,欢迎大家指正
如果我能控制这块区域的数据存取的话,是不是就能控制截屏功能了。我对截屏的技术不是很熟悉,显示驱动也不是很懂,只是觉得文件驱动方面可以有文件过滤驱动存在,
那么显示驱动方面有没有相应的过滤驱动存在,有的话能不能实现上面的构想。一点陋见,欢迎大家指正
针对zzw315的二个问题
1. 因为我不熟悉显示驱动,所以无法准确回答,希望能有显示驱动方面的高人能站出来指点一下
2. 在驱动中获得进程的名称,然后根据名称来判断是否可以读取数据
CFileDialog savePath(FALSE ,NULL,"save.bmp",OFN_HIDEREADONLY,"Bitmap Files(*.bmp)|*.bmp||",NULL);
savePath.m_ofn.lpstrTitle="请选择保存路径并输入文件名";
if(savePath.DoModal()==IDOK)
{
CString fullName;
fullName=savePath.GetPathName();
// m_tip="屏幕成功拷贝"; //一个编辑框的变量
UpdateData(FALSE);
//获得屏幕窗口的对象句柄
CWnd *pWnd=GetDesktopWindow();
//对话框窗口最小化,使截到的屏幕不包含对话框窗口
this->ShowWindow(SW_SHOWMINIMIZED);
//将屏幕窗口拷贝到DIB位图中
HANDLE hDib=DIBFromWindow(pWnd,NULL);
CFile file;
file.Open(fullName,CFile::modeCreate|CFile::modeWrite);
SaveToFile(hDib,file);//将位图存为指定名字的文件
file.Close();
GlobalFree(hDib);
}
代码是实现屏幕拷贝的代码吧,
因为实现屏幕的方式有好多种,
( http://www.codeproject.com/KB/dialog/screencap.aspx 这篇文章内分别提到了利用GDI/DirectX/WMEncode实现屏幕拷贝的方法)
所以想讨论一下有没有一种完全屏蔽屏幕拷贝的方法存在
如果从应用层的话:
应用程序屏幕拷贝的方法是什么,调用什么API!?
我不让它做这些这些事,限制它做这些事!应该可以解决!1、要知道程序屏幕拷贝的所有方法,包括调用了什么API,通过HOOK API方法应该可以搞定!
2、可能会遗漏一些控制!不过当我们知道一种屏幕拷贝方法解决一个!就像杀毒软件的补丁包似的!这些都是理论上的讨论,实际上做起来还是有许多细节问题的:)
反正是讨论嘛:)希望高手能从驱动层赐教一二:)
你无法控制,因为你在intel架构上没有任何"特权"。架构是开放的,你能
控制的,别人也能不让你控制。
>> 我拿专用照相机拍屏幕你怎么防?
呵呵,这个当然没办法防,
但这世界上是没有绝对的,从技术层面上能做到做好就OK了,不能太苛求了>> 你无法控制,因为你在intel架构上没有任何"特权"。架构是开放的,你能
>> 控制的,别人也能不让你控制。
这是当然的,知道了原理,你想搞破坏的话总归能实现的,比如卸载相应的驱动啊等比较暴力的方法
我们现在只是做技术层面的讨论,对于一些极端的情况就暂不考虑
-_-! 我都没注意自己写了这4个字 汗~~这儿只是提出我个人对禁用截屏技术的一点想法,
由于对显示驱动和截屏技术都不是很了解,只能泛泛而提拉不知道有没有高手能站出来给大家说一下这个方案为什么可行或者为什么不可行。
悲哀啊,看来一切绝对统治都是不得人心的。
我所知道的crt显示器的电磁波辐射很强,利用收到的电磁波可以还原成为图像。
我所知道的crt显示器的电磁波辐射很强,利用收到的电磁波可以还原成为图像。]不是吧......太强了.....这也行........
真是一切皆有可能啊.....