使用Java清除OS内存缓冲区

时间:2013-03-28 05:29:50

标签: java linux winapi operating-system buffer

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

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

2:这个flushBuffer代码是否适用于所有操作系统?或者我是否需要对Windows / Linux / Mac进行单独检查 谢谢

4 个答案:

答案 0 :(得分:2)

要禁用应用中任何组件的复制+粘贴功能(取自Disabling 'paste' in a jTextfield

textComponent.setTransferHandler(null);

但除此之外的任何事情都将是一次黑客攻击。您可以使用jnativehook全局收听打印屏幕,然后可能以某种方式遮住窗口。我不知道,偏执是一件棘手的事。

答案 1 :(得分:1)

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

只有空文本并将其复制到缓冲区。

除此之外,你可以做的事情并不那么可靠。

代码如下:

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

修改:对于网络应用,请使用this answer clipboard jquery plugin查看this way

答案 2 :(得分:0)

根据要求/安全问题,清除内存(允许数据写入其中)是错误的设计。更好地覆盖击键。例如ctrl/alt+(any key)printscr

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

答案 3 :(得分:0)

这种替代方法怎么样:

  1. 假设您的程序使用Swing UI,当用户专注于窗口时,只显示敏感数据,当用户专注于另一个窗口/程序时,使数据不可见
  2. 假设您正在使用Windows,则可以使用此post
  3. 中提到的组策略禁用打印屏幕
  4. 使用其他海报建议的防止复制粘贴机制
  5. 说实话,我没有尝试过,我不确定它是否有用。它也可能是操作系统相关的