我有一个Swing窗口,其中包含敏感信息,我希望阻止用户截取屏幕截图,或者在截取屏幕截图时隐藏窗口。
我怎样才能做到这一点?
答案 0 :(得分:9)
我过去看到的一个聪明的方法是利用人类的persistance of vision,一次只显示一部分图像。
作为一个简单的例子,假设您没有在文本框中呈现密码“p455w0rd”,而是有一个特殊的文本框,可以非常快速地呈现三个不同的框架:
p ␣ ␣ 5 ␣ ␣ r ␣
␣ 4 ␣ ␣ w ␣ ␣ d
␣ ␣ 5 ␣ ␣ 0 ␣ ␣
任何屏幕截图都只捕获数据的一部分(1/3),并且需要捕获器获取许多屏幕截图,选择包含所有信息的三个屏幕截图,然后将它们组合在一个图像编辑器中以恢复数据。 / p>
更好的解决方案是使用更多的帧(尽管闪烁会随着帧数的增加而增加)或更精细的粒度(例如,像素,而不是字符)。
但请记住,这种解决方案只会使存储数据变得更加困难。您很难阻止用户掏出笔或相机。除非这是针对试图保护客户数据的某些政府或呼叫中心应用程序,否则我会认真考虑不添加此类功能。
答案 1 :(得分:7)
如果有人试图这样做,我会在VM中运行他们的程序,然后截取VM屏幕截图。
所以你无法阻止这样的事情......你为什么要这样做?
答案 2 :(得分:2)
Ubnfortunatly,你将无法以有效的方式这样做。
首先,操作系统在拍摄截图时可能不会发送事件(可能会给你一个句柄或事件)。
Sceond,用户可以随时在VM中运行您的应用程序(防止发送通风口),或者更糟,更容易,使用可拍照手机或任何其他设备拍照。
最后,显示用户可以看到但不记忆的信息的重点是什么?如果您希望隐藏您的信息,请不要向用户显示,否则他将始终能够复制它们(例如,考虑娱乐行业和DVD筛选器的问题)。
最后,如果您想向老板提供一些正面信息,请查看jintellitype,这样您就可以为“打印屏幕”键注册一个监听器。
答案 3 :(得分:1)
我知道如何做到这一点。我从来没有这样做过。但我今天肯定会尝试这一点。
KeyEvent
。如果按下的键是VK_PRINTSCREEN
,请清除系统剪贴板。 (如果您尚未实施步骤1,则会导致剪贴板上的所有数据丢失。)
以下是一些可以帮助您的网站。
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();
}