禁用我的Swing窗口的屏幕截图

时间:2010-09-06 10:02:52

标签: java swing screenshot

我有一个Swing窗口,其中包含敏感信息,我希望阻止用户截取屏幕截图,或者在截取屏幕截图时隐藏窗口。

我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:9)

我过去看到的一个聪明的方法是利用人类的persistance of vision,一次只显示一部分图像。

作为一个简单的例子,假设您没有在文本框中呈现密码“p455w0rd”,而是有一个特殊的文本框,可以非常快速地呈现三个不同的框架:

  1. p ␣ ␣ 5 ␣ ␣ r ␣
  2. ␣ 4 ␣ ␣ w ␣ ␣ d
  3. ␣ ␣ 5 ␣ ␣ 0 ␣ ␣
  4. 任何屏幕截图都只捕获数据的一部分(1/3),并且需要捕获器获取许多屏幕截图,选择包含所有信息的三个屏幕截图,然后将它们组合在一个图像编辑器中以恢复数据。 / p>

    更好的解决方案是使用更多的帧(尽管闪烁会随着帧数的增加而增加)或更精细的粒度(例如,像素,而不是字符)。

    但请记住,这种解决方案只会使存储数据变得更加困难。您很难阻止用户掏出笔或相机。除非这是针对试图保护客户数据的某些政府或呼叫中心应用程序,否则我会认真考虑不添加此类功能。

答案 1 :(得分:7)

如果有人试图这样做,我会在VM中运行他们的程序,然后截取VM屏幕截图。

所以你无法阻止这样的事情......你为什么要这样做?

答案 2 :(得分:2)

Ubnfortunatly,你将无法以有效的方式这样做。

首先,操作系统在拍摄截图时可能不会发送事件(可能会给你一个句柄或事件)。

Sceond,用户可以随时在VM中运行您的应用程序(防止发送通风口),或者更糟,更容易,使用可拍照手机或任何其他设备拍照。

最后,显示用户可以看到但不记忆的信息的重点是什么?如果您希望隐藏您的信息,请不要向用户显示,否则他将始终能够复制它们(例如,考虑娱乐行业和DVD筛选器的问题)。

最后,如果您想向老板提供一些正面信息,请查看jintellitype,这样您就可以为“打印屏幕”键注册一个监听器。

答案 3 :(得分:1)

我知道如何做到这一点。我从来没有这样做过。但我今天肯定会尝试这一点。

  1. 显示窗口时,将剪贴板中的所有数据保存到某个变量中。 (这并不像听起来那么容易。)我不确定这是否可取。如果在实现之前联系您的系统管理员会更好。
  2. 捕获KeyEvent。如果按下的键是VK_PRINTSCREEN,请清除系统剪贴板。 (如果您尚未实施步骤1,则会导致剪贴板上的所有数据丢失。)
  3. 在退出应用程序之前,将您保存的所有数据传输到剪贴板。

以下是一些可以帮助您的网站。

http://www.javaworld.com/javaworld/javatips/jw-javatip61.html?page=1 http://www.java2s.com/Code/Java/Development-Class/CommunicatingwiththeSystemClipboard.htm

答案 4 :(得分:0)

将任何字符串保存到系统剪贴板。屏幕截图将被删除。

public void handleKey(KeyEvent ke) {
switch(ke.getCode()) {
    case PRINTSCREEN : 
            System.out.println("print screen");
            StringSelection ss = new StringSelection("??????");
            Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
            break;

    default: 
        //System.out.println(ke.getCode());
}

ke.consume();
}