Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java清除操作系统内存缓冲区_Java_Linux_Winapi_Operating System_Buffer - Fatal编程技术网

使用Java清除操作系统内存缓冲区

使用Java清除操作系统内存缓冲区,java,linux,winapi,operating-system,buffer,Java,Linux,Winapi,Operating System,Buffer,我事先很抱歉,因为我知道这个问题太笼统了,但我对这个问题还不熟悉,所以很难让这个问题更具体。我正在开发一个客户端存在一些安全问题的应用程序。他不希望用户能够打印屏幕或复制(ctrl+c程序的数据。现在当我开始处理这个问题时,我发现当这些按键时,操作系统会将数据复制到它的缓冲区中。现在我尝试检查,每当用户点击ctrl+c或printscreen的按键时,我的应用程序就会突然刷新缓冲区(或缓存我们所说的任何内容).现在我的问题是 1:如何使用Java刷新窗口的缓冲区?我应该检查哪个类API?(我搜索

我事先很抱歉,因为我知道这个问题太笼统了,但我对这个问题还不熟悉,所以很难让这个问题更具体。
我正在开发一个客户端存在一些安全问题的应用程序。他不希望用户能够打印屏幕或复制(ctrl+c程序的数据。现在当我开始处理这个问题时,我发现当这些按键时,操作系统会将数据复制到它的缓冲区中。现在我尝试检查,每当用户点击
ctrl+c
printscreen
的按键时,我的应用程序就会突然刷新缓冲区(或缓存我们所说的任何内容).现在我的问题是

1:如何使用Java刷新窗口的缓冲区?我应该检查哪个类API?(我搜索了很多次,但没有找到方法:(所以现在是so专家的时候了)

2:此flushBuffer代码是否适用于所有操作系统?还是需要对Windows/Linux/Mac进行单独检查。

感谢

根据需求/安全问题,清除内存(在允许数据写入内存后)是错误的设计。最好覆盖按键。如
ctrl/alt+(任意键)
printscr


要覆盖键行为,您需要实现
KeyListener
。一旦您为该键定义了自定义行为,它将不允许默认操作(如复制/剪切)

根据要求/安全问题,清除内存(在允许数据写入内存后)是错误的设计。最好覆盖按键。如
ctrl/alt+(任意键)
printscr


要覆盖键行为,您需要实现
KeyListener
。定义该键的自定义行为后,它将不允许默认操作(如复制/剪切)

这种替代方法如何:

  • 假设您的程序使用Swing UI,仅当用户关注窗口时显示敏感数据,当用户关注另一个窗口/程序时,使数据不可见
  • 假设您使用的是windows,您可以使用如本文所述的组策略禁用打印屏幕
  • 使用其他海报建议的防复制粘贴机制

  • 老实说,我还没有尝试过这个方法,我不确定它是否有效。它也可能依赖于操作系统

    这个替代方法怎么样:

  • 假设您的程序使用Swing UI,仅当用户关注窗口时显示敏感数据,当用户关注另一个窗口/程序时,使数据不可见
  • 假设您使用的是windows,您可以使用如本文所述的组策略禁用打印屏幕
  • 使用其他海报建议的防复制粘贴机制

  • 老实说,我没有尝试过这个方法,也不确定它是否有效。它也可能依赖于操作系统。您可以清除复制粘贴缓冲区,如下所述:

    只要有空文本,并复制到缓冲区

    除此之外,没有那么多可靠的事情可以做

    代码类似于:

    Action action = new DefaultEditorKit.CopyAction();
    action.actionPerformed(
       new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null));
    


    编辑:对于web应用,请参阅,使用。

    您可以清除复制粘贴缓冲区,如下所述:

    只要有空文本,并复制到缓冲区

    除此之外,没有那么多可靠的事情可以做

    代码类似于:

    Action action = new DefaultEditorKit.CopyAction();
    action.actionPerformed(
       new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null));
    


    编辑:对于web应用程序,请参阅,使用。

    禁用应用程序中任何组件的复制+粘贴(取自)


    但除此之外的任何东西都将是一种黑客行为。你可以使用全局收听打印屏幕,然后可能会以某种方式关闭窗口。我不知道,偏执狂是一件棘手的事情。

    禁用应用程序中任何组件的复制+粘贴(摘自)


    但除此之外的任何事情都将是一种黑客行为。你可以使用手机收听打印屏幕,然后可能会以某种方式遮住你的窗口。我不知道,偏执狂是一件棘手的事情。

    假设你已经做到了这一点,那么你如何防止用户拔出智能手机/相机并拍摄他的电脑屏幕:)?不要忘记,您还需要处理诸如屏幕录制器(GIMP、camstudio等)、屏幕截图辅助程序(剪贴工具)等程序等等。我回忆起很久以前的一个程序,Realplayer,它似乎不可能打印屏幕,因为每当我尝试它时,视频根本不在屏幕截图中,而是显示一个黑屏。显然它所做的是直接写入视频内存-你可以尝试,但要知道它是可以绕过的(通过在windows中更改视频设置)。基本上,您无法可靠地做到这一点。如果您的客户对适合普通用户但不适合更高级(或者,如gerrytan所述,任何使用相机的人)的内容感到满意,只有这样,才有可能实现远程复制。另外,请注意,由于您将清除所有程序共享的复制缓冲区,因此您有破坏其他软件的危险。@eis已理解:)但是,怎样才能清除缓冲区呢?@卑鄙的回答补充道:假设你已经做到了这一点,那么你如何防止用户拔出他的智能手机/相机并拍摄他的电脑屏幕:)?别忘了你还需要处理屏幕记录器(Gimps、camstudio等)、屏幕截图辅助程序等程序(剪贴工具)等等。我回忆起很久以前的一个程序Realplayer,它似乎不可能打印屏幕,因为每当我尝试它时,视频根本不在屏幕截图中,程序显示的是一个黑屏。显然,它所做的是直接写入视频内存-你可以尝试,但要知道它是可以绕过的(通过在windows中更改视频设置)。基本上,您无法可靠地做到这一点。如果您的客户对适合普通用户但不适合更高级(或者,如gerrytan所述,任何使用相机的人)的内容感到满意,那么只有