package com.example.demo.test;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Timer;
import java.util.TimerTask;
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
import org.jnativehook.mouse.NativeMouseEvent;
import org.jnativehook.mouse.NativeMouseListener;
public class InputLogger implements NativeKeyListener, NativeMouseListener {
private static StringBuilder logBuilder = new StringBuilder();
private static Timer timer = new Timer();
public static void main(String[] args) throws NativeHookException, IOException {
// 初始化日志文件
File logFile = new File("input.log");
if (!logFile.exists()) {
logFile.createNewFile();
}
// 注册鼠标和键盘事件
GlobalScreen.registerNativeHook();
// 添加监听器
InputLogger inputLogger = new InputLogger();
GlobalScreen.addNativeKeyListener(inputLogger);
GlobalScreen.addNativeMouseListener(inputLogger);
// 创建定时任务
TimerTask task = new TimerTask() {
@Override
public void run() {
try {
// 获取当前时间
LocalDateTime now = LocalDateTime.now();
// 使用ISO标准格式化时间
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
String timestamp = now.format(formatter);
// 将日志写入文件
FileWriter writer = new FileWriter(logFile, true);
writer.write("====== " + timestamp + " ======\n");
writer.write(logBuilder.toString());
writer.flush();
writer.close();
// 清空日志
logBuilder.setLength(0);
} catch (IOException e) {
e.printStackTrace();
}
}
};
// 开始定时任务,每5秒记录一次日志
timer.scheduleAtFixedRate(task, 0, 5000);
}
/**
* 键盘按下事件
*/
@Override
public void nativeKeyPressed(NativeKeyEvent event) {
String log = "Key Pressed: " + NativeKeyEvent.getKeyText(event.getKeyCode()) + "\n";
logBuilder.append(log);
}
/**
* 键盘释放事件
*/
@Override
public void nativeKeyReleased(NativeKeyEvent event) {
String log = "Key Released: " + NativeKeyEvent.getKeyText(event.getKeyCode()) + "\n";
logBuilder.append(log);
}
/**
* 键盘输入事件(这个方法是必须实现的抽象方法,但是我们不需要它)
*/
@Override
public void nativeKeyTyped(NativeKeyEvent event) {
// do nothing
}
/**
* 鼠标单击事件
*/
@Override
public void nativeMouseClicked(NativeMouseEvent event) {
String log = "Mouse Clicked: " + event.getX() + "," + event.getY() + "\n";
logBuilder.append(log);
}
/**
* 鼠标按下事件
*/
@Override
public void nativeMousePressed(NativeMouseEvent event) {
String log = "Mouse Pressed: " + event.getX() + "," + event.getY() + "\n";
logBuilder.append(log);
}
/**
* 鼠标释放事件
*/
@Override
public void nativeMouseReleased(NativeMouseEvent event) {
String log = "Mouse Released: " + event.getX() + "," + event.getY() + "\n";
logBuilder.append(log);
}
}
java代码 监听鼠标键盘输入生成日志 重复执行日志
最新推荐文章于 2024-05-25 14:46:37 发布