Java - 从剪贴板监听复制和粘贴

标签 java clipboard event-listener clipboarddata clipboard-interaction

( 1 ) 有没有办法监听任何 剪贴板更新(包括 Ctrl+C/X、PrtSc(屏幕截图)和其他程序所做的更改) java ?我试过这个:

    Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(new FlavorListener() {
        @Override
        public void flavorsChanged(FlavorEvent e) {
            System.out.println("Copy detected");
        }
    });

这可以很好地处理 Ctrl+C 更改,但不会注意到不是用户手动所做的更改,例如通过屏幕截图软件或 PrtSc 按钮。

( 2 ) 有没有办法监听粘贴 操作(Ctrl+V、“粘贴”按钮等)?我想要类似的东西(或者只是具有类似的功能):

// ...
    @Override 
    public void prePaste(PasteEvent e) {
        System.out.println("Paste detected");
        e.cancel(); // reject the paste (so that user's Ctrl+V pastes nothing)
    }
// ...

最佳答案

在将内容粘贴到复合 Material 中时进行捕获的一种方法是添加一个监听器“addKeyListener”。

Java 8

    KeyAdapter keyAdapter = new KeyAdapter()
    {
        @Override
        public void keyPressed(KeyEvent keyEvent)
        {
            if(((keyEvent.getModifiers() & InputEvent.CTRL_MASK) != 0) && (keyEvent.getKeyCode() == KeyEvent.VK_V))
            {
                String text = null;

                try
                {
                    text = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
                    System.out.println(text);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
                keyEvent.consume();
            }
        }

    };

    stringTF.addKeyListener(keyAdapter);

对于版本 9 以上的 java 你可以使用下面的条件

            if(((keyEvent.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0) && (keyEvent.getKeyCode() == KeyEvent.VK_V))
            {
                // Code ....
            }

关于Java - 从剪贴板监听复制和粘贴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53042779/

相关文章:

java - 在不调用 Web 服务的情况下获取 soap 消息

java - 覆盖相等并查找哪个字段不相等

java - 保持最小应用程序服务器依赖性的方法?

java - 如何在我的 android 应用程序中放置自定义字体?

android - 三星设备和辅助功能服务(ACTION_PASTE、剪贴板)

javascript - 会有 HTML5 剪贴板 API 吗?

c# - 如何编写 C++ 代码来处理 C# 代码中引发的事件

Powershell 输出到剪贴板时不带尾随换行符?

php - Symfony2 - 数据库级别 onDelete Cascade 不会触发生命周期事件

javascript - 使用 angularjs 添加事件监听器