我怎么知道用户是否制作了截图?

时间:2012-01-14 11:49:53

标签: c# screenshot

我正在编写一个小型的c#程序,我不希望最终用户在使用我的程序时截取屏幕截图,是否可能?或者即使他拿一个,我怎么知道呢?

由于我缺乏c#编码经验,所以如果这是一个内容不佳的问题,请提前致谢并抱歉。

3 个答案:

答案 0 :(得分:2)

您可以使用低级键盘过滤器创建系统范围的键盘挂钩,并取消任何打印屏幕键盘组合。但是,如果有人也安装了一个帮助应用程序(如Gadwin或其他东西),它将变得更加困难,因为你不会事先知道你应该抓住什么键盘快捷键(大多数工具允许指定你自己的钩子)。

旁注:通常不希望改变系统行为。屏幕截图是系统行为,为故障排除提供了明确的目的。如果您阻止此操作,用户将无法向您显示错误的屏幕截图。但如果你必须这样做,你就可以做到。


编辑:在更深层次上,你可以install an API hook。所有屏幕截图应用程序都使用API​​调用来获取屏幕(部分)的内容。但API挂钩很难做到。更简单的方法可能是编写用户级驱动程序。虽然你可以阻止这一切,但真的值得一试吗?

答案 1 :(得分:2)

您可能需要keyboard hook。但它会告诉你用户是否按下了“打印屏幕”键,而不是如果有人以编程方式使用某些GDI功能截取屏幕截图。

我怀疑是否可以阻止所有截取屏幕截图。

答案 2 :(得分:1)

一般答案:不可以。这是不可能的 - 尤其是来自C#。有很多方法可以截取屏幕截图,甚至用C ++ / WinAPI编写的应用程序也只能检测其中一些,但不是全部。

还要考虑 - 如果用户在虚拟机中运行您的应用程序该怎么办?他将能够在主机上截取屏幕截图,你可以做任何事情都无法检测(甚至不能阻止)。