【问题标题】:Avoid my application from capturing using printscreen [duplicate]避免使用 printscreen 捕获我的应用程序 [重复]
【发布时间】:2013-11-14 19:27:48
【问题描述】:

正如标题所示,我需要创建一个无法使用打印屏幕捕获的 Windows 应用程序。

该应用程序将在我的计算机上运行,​​并将显示在我的屏幕上。不涉及互联网。

这可能在 C++ 中做到这一点吗?还是其他语言??

谢谢。

【问题讨论】:

  • 我认为不可能..
  • 您可以听 Print Screen 键并尝试绘制黑色,但我怀疑它会起作用。
  • @Romoku 忘记打印屏幕。 graphics.CopyFromScreen 怎么样?不确定是否仅在按下打印屏幕时才需要阻止操作
  • 我认为有一篇博客文章讨论了一种方法来做到这一点,这是我最近偶然发现的,所以谷歌......

标签: c# c++ c windows


【解决方案1】:

据我所知,有两种方法可以实现:

  1. 当您的应用程序是具有焦点的窗口时,不允许打印屏幕 - 这是公平的

简单:你需要修改你的窗口过程来捕捉WM_HOTKEY,你不能把它传回系统:

case WM_HOTKEY:
/* your code */;
break; // no DefWndProc() call
  1. 当您的应用程序正在运行时,根本不允许打印屏幕。您必须设置一个钩子,它将所有消息,甚至那些窗口外的消息引导到您的程序。准确的信息可以在这里找到:http://www.cubert.net/2008/05/sntt-disable-print-screen-key-win32-api.html

当检测到打印屏幕时,您还可以让您的用户制作打印屏幕,但使窗口空白。为此,在片段中:

case WM_HOTKEY: 
/* here you blank your window */;
DefWndProc(); // send the message about print screen back to the system.
break;

当然,这完全取决于您使用的 API,但假设您使用纯 WinAPI - 这就是您的做法。

【讨论】:

  • 您的建议是否涉及截图工具之类的工具?
  • @ThomasMatthews 不,它没有。我想没有办法完全禁止筛选你的窗口(也许ShowWindow(hwnd, SW_HIDE),但你仍然可以尝试通过获取 DeviceContext 等来实现内容)。但是当涉及到禁用“使用打印屏幕捕获”时,在我的书中,打印屏幕是一个 sys 键,问题主要是关于简单按下这个键。
【解决方案2】:

您最多可以做到这种“类型”。您可以捕获 windows 打印屏幕事件并且什么都不做,但是 3rd 方打印屏幕不依赖于这些。一个好的高分辨率数码相机更难“编码”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    相关资源
    最近更新 更多