Я создаю фоновую Java-программу, которая будет принимать данные от считывателя NFC с поддержкой USB и выполнять запрос API с найденными на нем данными (10-значное число). Однако у читателей нет собственного программного обеспечения, и они ведут себя как клавиатура, вводя отсканированное число в любое выделенное текстовое поле.
Используя JNativeHook , я смог создать тип кейлоггерапрограммного обеспечения, которое ожидает быстрого ввода 10-значного числа, а затем отправляет запрос API. Этот подход прекрасно работает, но число все еще вводится в любом переднем плане / выделенном текстовом поле, поэтому я искал способы исправить это.
Мне было интересно, есть ли способ проверить весь текствводы перед их отображением или сразу же возвращайте этот номер после ввода.
Если вы хотите взглянуть на весь (маленький) проект, он доступен здесь .
CardReaderKeylogger.java :
class CardReaderKeylogger {
static void initialize() {
//Turn off mouse logging
LogManager.getLogManager().reset();
Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
logger.setLevel(Level.OFF);
//Key listen events
NativeKeyListener keyListener = new NativeKeyListener() {
@Override public void nativeKeyTyped(NativeKeyEvent nativeKeyEvent) { }
@Override public void nativeKeyReleased(NativeKeyEvent nativeKeyEvent) { }
String buddingID = "";
@Override public void nativeKeyPressed(NativeKeyEvent key) {
String keyPressed = NativeKeyEvent.getKeyText(key.getKeyCode());
try { //Only stores value if it's a number
Integer.parseInt(keyPressed);
//Starts a timer to reset the number if it isn't all entered in time
if (buddingID.equals("")) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override public void run() {
//System.out.println("Resetting id");
buddingID = "";
timer.cancel();
}
}, 200, 200);
}
buddingID += keyPressed;
if (buddingID.length() == 10) {
PassToggleRequest.send(buddingID);
buddingID = "";
}
} catch (NumberFormatException ex) {
buddingID = "";
}
}
};
//Enable keylogger
try {
GlobalScreen.registerNativeHook();
} catch (NativeHookException ex) {
System.err.println("There was a problem registering the native hook.");
System.err.println(ex.getMessage());
return;
}
/* Construct the object and initialize native hook. */
GlobalScreen.addNativeKeyListener(keyListener);
}
}