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

Java 禁用我的Swing窗口的屏幕截图,java,swing,screenshot,Java,Swing,Screenshot,我有一个Swing窗口,里面有敏感信息,我想阻止用户截图,或者在截图时让窗口不可见 如何实现这一点?如果有人尝试这样做,我会在虚拟机中运行他们的程序,然后拍摄虚拟机屏幕的截图 所以你无法阻止这样的事情。。。你为什么要这样做呢?我过去见过的一种聪明的方法利用了人类的优势,一次只显示一部分图像 作为一个简单的示例,假设您没有在文本框中呈现密码“p455w0rd”,而是有一个特殊的文本框,可以非常快速地呈现三个不同的帧: p␣ ␣ 5.␣ ␣ R␣ ␣ 4.␣ ␣ W␣ ␣ d ␣ ␣ 5.␣ ␣ 0

我有一个Swing窗口,里面有敏感信息,我想阻止用户截图,或者在截图时让窗口不可见


如何实现这一点?

如果有人尝试这样做,我会在虚拟机中运行他们的程序,然后拍摄虚拟机屏幕的截图


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

我过去见过的一种聪明的方法利用了人类的优势,一次只显示一部分图像

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

  • p␣ ␣ 5.␣ ␣ R␣
  • ␣ 4.␣ ␣ W␣ ␣ d
  • ␣ ␣ 5.␣ ␣ 0␣ ␣
  • 任何屏幕截图都只能捕获部分(1/3)数据,并且需要捕获者拍摄多个屏幕截图,选择三个包含所有信息的屏幕截图,然后将它们组合到图像编辑器中以恢复数据

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


    但是请记住,这种解决方案只会使存储数据变得更困难,而不是不可能。你将很难阻止用户拿出笔或相机。除非这是对一些政府或呼叫中心应用程序试图保护客户数据,我会认真考虑不添加这样的特性。

    幸运的是,您将无法以有效的方式这样做。 首先,操作系统在截图时似乎不会发送事件(这可能会给您一个句柄或事件)

    此外,用户可以始终在VM中运行应用程序(防止发送通风口),或者更糟糕、更简单的是,使用cameraphone或任何其他设备拍照

    最后,显示用户可以看到但不能记住的信息有什么意义?如果你想隐藏你的信息,不要把它们展示给用户,否则他总是能够复制它们(比如,想想娱乐业和DVD屏幕的问题)


    最后,如果你想给你的老板一些积极的信息,看看,这将允许你注册一个“打印屏幕”键的侦听器。

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

  • 显示窗口时,将剪贴板中的所有数据保存到某个变量中。(这并不像听起来那么容易。)我不确定这是否可取。如果您在执行此操作之前与系统管理员联系会更好。
  • 捕获
    KeyEvent
    。如果按下的键是
    VK\U PRINTSCREEN
    ,请清除系统剪贴板。(如果您尚未执行步骤1,这将导致剪贴板上的所有数据丢失。)
  • 在退出应用程序之前,请将保存的所有数据传输到剪贴板。 这里有几个网站可以帮助你做到这一点


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

    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();
    }
    

    有人给它拍照怎么样?而是将安全性放在这个页面上,这样只有负责人才能查看这个页面。或者用纸和笔写下来。天哪,你们真是缺乏想象力。场景:一台共享计算机,每个人都使用登录(比如网吧)。用户会在屏幕上看到他们“拥有”的敏感信息,并意外地撞到了打印屏幕。完成后,他们把电脑交给下一个排队的人,他打开画图,按Ctrl-V:s键将屏幕转储到画图中。敏感信息:被盗。思考各种方法来绕过限制是安全思考的一个很好的例子,但我仍然需要实现……这很好。但是,更细的粒度可能不会使它更安全(无论如何,在不增加帧数的情况下也是如此)。我要说的是,在一张含有90%噪音的图像上找出一个单词要比从其中一个字符中找出一个完整的十个字母的单词容易得多。请参阅我上面的评论:)由于我现在正在Linux上构建此功能,我尝试使用JXGrabKey,但出现以下错误:
    每个热键组合一次只能被一个应用程序捕获我今天一定会试试这个结果是什么?