来自另一个程序的 Ctrl+C 键监听器
Keylistener for Ctrl+C from another program
我想在通过Ctrl+C复制记事本中的文本时自动将内容放入文本区域。我想知道如何听记事本的键。是否可以听记事本或任何其他程序的键?
不,不可能获取 java 中所有应用程序的所有按键事件。
所以你有 2 个可能的解决方案。
你只能通过剪贴板监听器获取剪贴板的变化。 SO example
使用JNA, JNI, jintellitype, ...来监听系统按键事件SO example
这是可能的,但这是一种非常糟糕的编码习惯。如果您还想这样做:https://github.com/kwhat/jnativehook.
一个更好的主意是观察剪贴板中的变化。
这是其他答案和评论中引用的剪贴板侦听器的 JavaFX 版本:
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.input.Clipboard;
import javafx.stage.Stage;
public class SystemClipboardWatcher extends Application {
@Override
public void start(Stage primaryStage) {
TextArea clipboardView = new TextArea();
AnimationTimer timer = new AnimationTimer() {
Clipboard systemClipboard = Clipboard.getSystemClipboard();
@Override
public void handle(long timestamp) {
String content = systemClipboard.getString();
// do anything you need with this, e.g.:
clipboardView.setText(content);
}
};
timer.start();
primaryStage.setScene(new Scene(clipboardView, 600, 600));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我想在通过Ctrl+C复制记事本中的文本时自动将内容放入文本区域。我想知道如何听记事本的键。是否可以听记事本或任何其他程序的键?
不,不可能获取 java 中所有应用程序的所有按键事件。
所以你有 2 个可能的解决方案。
你只能通过剪贴板监听器获取剪贴板的变化。 SO example
使用JNA, JNI, jintellitype, ...来监听系统按键事件SO example
这是可能的,但这是一种非常糟糕的编码习惯。如果您还想这样做:https://github.com/kwhat/jnativehook.
一个更好的主意是观察剪贴板中的变化。
这是其他答案和评论中引用的剪贴板侦听器的 JavaFX 版本:
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.input.Clipboard;
import javafx.stage.Stage;
public class SystemClipboardWatcher extends Application {
@Override
public void start(Stage primaryStage) {
TextArea clipboardView = new TextArea();
AnimationTimer timer = new AnimationTimer() {
Clipboard systemClipboard = Clipboard.getSystemClipboard();
@Override
public void handle(long timestamp) {
String content = systemClipboard.getString();
// do anything you need with this, e.g.:
clipboardView.setText(content);
}
};
timer.start();
primaryStage.setScene(new Scene(clipboardView, 600, 600));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}