繁体   English   中英

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

[英]How can I know if the user has made a screenshot?

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

由于我缺乏 c# 编码经验,如果这是一个内容不佳的问题,在此先感谢并抱歉。

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

附带说明:通常不希望更改系统行为。 屏幕截图是系统行为,用于故障排除的显着目的。 如果您阻止此操作,用户将无法向您显示错误的屏幕截图。 但如果你必须这样做,你可以做到。


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

您可能需要一个键盘挂钩 但它会告诉你用户是否按下了“打印屏幕”键,而不是有人使用某些 GDI 函数以编程方式截取屏幕截图。

我怀疑是否有可能阻止所有截取屏幕截图的方式。

一般回答:不可以。无法检测到这一点 - 特别是从 C# 中。 截屏的方法有很多种,甚至用 C++/WinAPI 编写的应用程序也只能检测到其中的一些,而不是全部。

还要考虑 - 如果用户在虚拟机中运行您的应用程序怎么办? 他将能够在主机上截取屏幕截图,而您绝对无法检测(甚至无法阻止)这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM