使用 Java 或 Python 捕获行为生物识别工具的按键时间?

问题描述

我正在尝试创建一个行为生物识别工具,该工具使用键盘使用模式来识别用户。这个想法是捕捉用户如何输入,而不是什么。我考虑过捕捉用户按下和释放一个键所需的时间,以及从一个键按下到另一个的时间。
我一直在研究 jnativehook,但我只找到了“键盘记录器”类型的程序和教程,与 pynput 相同,我认为不可能使用我描述的方式......
有人可以给我一个提示或教程来做这样的事情吗?
谢谢。

解决方法

pynput 可以运行一个函数 on press 和另一个 on release 并且这两个函数都可以将当前时间保存在两个变量中。如果你在一个函数中减去它们,那么你应该得到被按下的时间,如果你在另一个函数中减去它们那么你应该得到释放的时间。

在代码中,我检查任何键之间的时间以及单独检查每个键。

from pynput import keyboard
import datetime

# --- data ---

press_time = None
release_time = None

keys_press_time = {}
keys_release_time = {}

# --- functions ---

def press(key):
    global press_time

    press_time = datetime.datetime.now()

    if release_time:
        print('how long was released:',press_time - release_time,'key: ANY')

    # --- individual keys ---

    keys_press_time[key] = press_time

    if key in keys_release_time:
        print('how long was released:',keys_press_time[key] - keys_release_time[key],'key:',str(key))

def release(key):
    global release_time

    release_time = datetime.datetime.now()

    if press_time:
        print('how long was pressed :',release_time - press_time,'key: ANY')

    # --- individual keys ---

    keys_release_time[key] = release_time

    if key in keys_press_time:
        print('how long was pressed :',keys_release_time[key] - keys_press_time[key],str(key))

# --- main ---

with keyboard.Listener(on_press=press,on_release=release) as listener:
    # ... other code ...
    listener.join()

唯一的问题是,当您将某个密钥保留更长时间并且系统开始重复密钥(它生成 release 事件)时,它会提供更短的时间。它需要关闭系统中的“重复”或者需要更复杂的代码来减少这个问题。


顺便说一句:我认为你可以用非常相似的方式对 jnativehook 做同样的事情。