0

我想取消通过快捷方式访问的粘贴CTRL + V。我首先使用JNativeHook来获取按键。这是我的测试课:

public class CopyCancelingTest {
    public static void main (String[] args) {
        Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
        logger.setLevel(Level.WARNING);
        logger.setUseParentHandlers(false);
        try {
            GlobalScreen.registerNativeHook();
        }
        catch (NativeHookException ex) {
            System.err.println(ex.getMessage());
            System.exit(1);
        }
        GlobalScreen.addNativeKeyListener(new KeyListenerTest());
    }
}

class KeyListenerTest implements NativeKeyListener {
    boolean controlDown;
    Clipboard board = Toolkit.getDefaultToolkit().getSystemClipboard();

    @Override
    public void nativeKeyPressed(NativeKeyEvent e) {
        if (e.getKeyCode() == NativeKeyEvent.VC_CONTROL)
            controlDown = true;

        if (e.getKeyCode() == NativeKeyEvent.VC_V && controlDown) {
            board.setContents(new StringSelection(""), null);
        }

    }

    @Override
    public void nativeKeyReleased(NativeKeyEvent e) {
        if(e.getKeyCode() == NativeKeyEvent.VC_CONTROL)
            controlDown = false;
    }

    @Override
    public void nativeKeyTyped(NativeKeyEvent e) {
    }
}

请注意,main 方法几乎可以忽略。它只是启动 NativeKeyListener 而不会使控制台不可读。

如你看到的。我只是在CTRL + V按下时将剪贴板设置为空字符串。这有一个缺陷。它只有在你运行它两次时才有效。在第一次运行时,它只会按预期粘贴内容。那么有没有办法以一种干净且有效的方式取消这个全局按键呢?它不必与 JNativeHook 一起使用。

4

0 回答 0