GetLastInputInfo(),例如detecting idle time using python,是敏感的鼠标和键盘输入,但它也干扰游戏控制器输入,我想忽略.

有没有简单的方法可以做到这一点?

一种方法是使用原始输入,例如Having trouble using winapi to read input from a device,它需要由同步的写和读线程包装,这些线程记录事件并可以查询.

推荐答案

您可以使用pynput模块通过键盘和鼠标侦听器获取用户输入.我创建了一个不考虑控制器输入的简短示例.(至少在我的PC上)

from time import time
from pynput.keyboard import Listener as KeyListener
from pynput.mouse import Listener as MouseListener

idle_time = time()
txt = "You've been idle for {} seconds."


def tell_time():
    global idle_time
    print(txt.format(time() - idle_time))
    idle_time = time()


if __name__ == '__main__':
    KeyListener(on_press=lambda key: tell_time()).start()
    with MouseListener(
            on_move=lambda x, y: tell_time(),
            on_click=lambda x, y, btn, b: tell_time(),
            on_scroll=lambda a, b, c, d: tell_time()
    ) as listener:
        listener.join()

Python相关问答推荐

三个给定的坐标可以是矩形的点吗

处理(潜在)不断增长的任务队列的并行/并行方法

加速Python循环

如何过滤包含2个指定子字符串的收件箱列名?

如何使用它?

try 将一行连接到Tensorflow中的矩阵

如果值发生变化,则列上的极性累积和

Pandas Loc Select 到NaN和值列表

joblib:无法从父目录的另一个子文件夹加载转储模型

索引到 torch 张量,沿轴具有可变长度索引

在Python中调用变量(特别是Tkinter)

使用嵌套对象字段的Qdrant过滤

利用SCIPY沿第一轴对数组进行内插

时长超过24小时如何从Excel导入时长数据

EST格式的Azure数据库笔记本中的当前时间戳

为什么在生成时间序列时,元组索引会超出范围?

两个名称相同但值不同的 Select 都会产生相同的值(discord.py)

利用广播使减法更有效率

当lambda函数作为参数传递时,pyo3执行

IpyWidget Select 框未打开