Java 全局拦截热键,但保持原始行为

Java 全局拦截热键,但保持原始行为,java,clipboard,hotkeys,Java,Clipboard,Hotkeys,我尝试使用Java截取复制和粘贴热键。 对于全局附加热键,我使用了,这对于 在不同的操作系统上附加热键 不过,这次我不想在操作系统上附加新的热键。我只想在两者之间执行代码。因此,我想在CTRL+V上添加一个热键,当我全局按下它时,我希望它在操作系统事件处理之前或之后(无所谓)执行我的自定义行为 例如,如果我的剪贴板中有文本:“Test Text”,我按CTRL+V,在粘贴之前,我想将剪贴板文本更改为“New Text” 是否有一个库,我可以用来不覆盖,而只是截取一个全局热键?您可以使用。从(稍加

我尝试使用Java截取
复制和粘贴
热键。 对于全局附加热键,我使用了,这对于 在不同的操作系统上附加热键

不过,这次我不想在操作系统上附加新的热键。我只想在两者之间执行代码。因此,我想在CTRL+V上添加一个热键,当我全局按下它时,我希望它在操作系统事件处理之前或之后(无所谓)执行我的自定义行为

例如,如果我的剪贴板中有文本:
“Test Text”
,我按CTRL+V,在粘贴之前,我想将剪贴板文本更改为
“New Text”

是否有一个库,我可以用来不覆盖,而只是截取一个全局热键?

您可以使用。从(稍加修改)开始:


这可能有点问题,因为如果一个按下左键和右键,然后释放其中一个,而不是另一个,
isCtrlDown
将是
false
。我不知道这是否适用于Mac电脑,因为我不知道要粘贴到Mac电脑上的组合键。

我知道如何访问剪贴板。问题是我需要知道什么时候。完全在按下CTRL+V时或之后。所以我需要在全球范围内联系这一关键事件。但我发现的所有库都只覆盖了标准行为。这不是我想做的。我不能用ant构建
.jar
文件。尽管我把维基当成了一本手册。我可能丢失了一些工具。这是一个巨大的工作开销,为什么不在github中简单地提供
.jar
文件呢?抱歉,无法以这种方式测试代码。已发布。。。好吧测试了这个,看起来很不错。我无法实现针对实际问题的代码,但我能够在粘贴事件实际完成后执行代码(
System.out
)。这正是我想要的。非常感谢。
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;

public class GlobalKeyListenerExample implements NativeKeyListener {

    boolean isCtrlDown = false;

    public void nativeKeyPressed(NativeKeyEvent e) {
        System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));

        if (e.getKeyCode() == NativeKeyEvent.VC_CONTROL_L || e.getKeyCode() == NativeKeyEvent.VC_CONTROL_R) {
            System.out.println("Ctrl pressed");
            isCtrlDown = true;
        }

        if (e.getKeyCode() == NativeKeyEvent.VC_V && isCtrlDown) {
            System.out.println("User hit Ctrl+V");
        }
    }

    public void nativeKeyReleased(NativeKeyEvent e) {
        System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));

        if (e.getKeyCode() == NativeKeyEvent.VC_CONTROL_L || e.getKeyCode() == NativeKeyEvent.VC_CONTROL_R) {
            System.out.println("Ctrl released");
            isCtrlDown = false;
        }
    }

    public void nativeKeyTyped(NativeKeyEvent e) {}

    public static void main(String[] args) {
        try {
            GlobalScreen.registerNativeHook();
        }
        catch (NativeHookException ex) {
            System.err.println("There was a problem registering the native hook.");
            System.err.println(ex.getMessage());
            System.exit(1);
        }

        GlobalScreen.addNativeKeyListener(new GlobalKeyListenerExample());
    }
}