是否可以编写一个不会出现在打印屏幕上的应用程序?

时间:2011-08-02 16:14:02

标签: windows printscreen

如果按下Print Scrn按钮,然后你打开画图,然后按Ctrl键就可以在那里制作你的图像,这样你的程序就不存在了,或者可能用黑盒子代替。

我没有很多windows编程经验,这对我来说只是一个好奇心,而不是我实际计划实现的东西。所有反馈都表示赞赏。

5 个答案:

答案 0 :(得分:2)

您无法从winform应用程序中禁用Print Scrn,因为它是一项操作系统功能。 即使有可能有人能够聪明地使用数码相机......

还要看下面的内容:

http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/f8fccf61-5132-4037-809d-f22f706e9e7b

答案 1 :(得分:2)

简短的回答是,没有万无一失的方法。这里有一个很好的讨论:prevent screen capture

答案 2 :(得分:1)

有没有想过为什么Windows Media Player中的某些视频会在您尝试对其进行屏幕截图时捕获黑屏/移动屏幕?它被称为硬件/视频覆盖。

请参阅:en.wikipedia.org/wiki/Hardware_overlay

来自维基百科上的文章:

  

作为硬件叠加使用的结果,一个截图程序(for   例如,一个自动内置到Windows中的激活时间   用户按下PrtSc键)通常不捕获内容   出现在硬件覆盖窗口中。而是一个空白区域   仅捕获包含特殊蒙版颜色的颜色。这是因为   屏幕捕获例程不考虑特殊的视频内存   专用于覆盖的区域 - 它只是捕获共享主要区域   屏幕由软件的图形子系统呈现。一些数字   权限管理方案使用硬件覆盖来显示受保护的   屏幕上的内容,利用这个怪癖来防止   通过屏幕截图复制受保护的文件[引证   需要]。禁用叠加支持会导致正常   覆盖 - 使用软件回退到共享内存,从而启用   截图捕获。

虽然我不知道如何来实现它,但它肯定是可能的。也许它会为你的研究提供一个良好的起点。

答案 3 :(得分:1)

是的,这是可能的。

必须拦截Print Screen按键/热键行为(我相信这是一个Windows热键),然后覆盖所需的行为。由于数据存储在内存中并且可以通过剪贴板访问,因此可以清除数据或不首先将数据存储起来。

如果是Windows,则必须使用Windows API来完成此操作。

我相信有几个商业程序具有此类功能,可以保护任何文件或从计算机上复制数据。

MSDN在此处描述了打印屏幕热键:

http://msdn.microsoft.com/en-us/library/ms646279(v=vs.85).aspx

答案 4 :(得分:0)

肯定有一种方法可以做到这一点 - 这只是一个问题,你需要完成它的堆栈有多低,以及需要多少工作。

如果rootkits可以隐藏用户空间进程的所有痕迹,那么它们当然可以被写入拦截打印屏幕并在捕获过程中隐藏一瞬间的窗口。