我想取消通过快捷方式访问的粘贴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 一起使用。