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が押されたときに、クリップボードを空の文字列に設定しています。これには欠陥があります。2回実行した場合にのみ機能します。最初の実行では、期待どおりにコンテンツが貼り付けられます。それで、このグローバルキープレスをクリーンで機能する方法でキャンセルする方法はありますか? JNativeHook である必要はありません。

4

0 に答える 0