本文目录导读:

- Python(跨平台)
- AutoHotkey(Windows)
- PowerShell(Windows)
- C++(Windows API)
- 命令行工具(Windows)
- JavaScript(浏览器环境)
- 实用场景代码
- 注意事项
Python(跨平台)
使用 pynput 库(推荐)
from pynput import mouse, keyboard
import time
# 鼠标监听
def on_move(x, y):
print(f"鼠标移动至 ({x}, {y})")
def on_click(x, y, button, pressed):
print(f"鼠标{'按下' if pressed else '释放'} {button} 在 ({x}, {y})")
# 键盘监听
def on_press(key):
try:
print(f"按下键: {key.char}")
except AttributeError:
print(f"特殊键: {key}")
def on_release(key):
print(f"释放键: {key}")
if key == keyboard.Key.esc:
return False # 停止监听
# 启动监听(非阻塞)
mouse_listener = mouse.Listener(on_move=on_move, on_click=on_click)
keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release)
mouse_listener.start()
keyboard_listener.start()
# 保持程序运行
mouse_listener.join()
keyboard_listener.join()
检测空闲时间
import time
from pynput import mouse, keyboard
last_activity_time = time.time()
def activity_detected():
global last_activity_time
last_activity_time = time.time()
# 监听所有活动
mouse.Listener(on_move=activity_detected, on_click=activity_detected).start()
keyboard.Listener(on_press=activity_detected).start()
while True:
idle_time = time.time() - last_activity_time
print(f"空闲时间: {idle_time:.1f}秒")
time.sleep(1)
AutoHotkey(Windows)
检测键盘输入
#Persistent
SetTimer, CheckActivity, 1000 ; 每秒检查一次
CheckActivity:
if (A_TimeIdleKeyboard > 5000) ; 5秒无键盘输入
ToolTip, 键盘已空闲 %A_TimeIdleKeyboard% 毫秒
else
ToolTip, 键盘活跃中
return
检测鼠标活动
#Persistent
SetTimer, CheckMouse, 100
CheckMouse:
; 检测鼠标移动
MouseGetPos, x, y
static lastX, lastY
if (x != lastX || y != lastY) {
ToolTip, 鼠标移动至 (%x%, %y%)
lastX := x, lastY := y
}
return
通用活动检测
#Persistent
SetTimer, CheckActivity, 500
CheckActivity:
idletime := A_TimeIdlePhysical
if (idletime > 10000) ; 10秒无任何活动
ToolTip, 系统空闲中 (%idletime% ms)
else
ToolTip, 用户活跃中
return
PowerShell(Windows)
使用 .NET 方法(后台运行)
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class ActivityChecker {
[DllImport("user32.dll")]
public static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
[StructLayout(LayoutKind.Sequential)]
public struct LASTINPUTINFO {
public uint cbSize;
public uint dwTime;
}
public static uint GetIdleTime() {
LASTINPUTINFO lastInput = new LASTINPUTINFO();
lastInput.cbSize = (uint)Marshal.SizeOf(lastInput);
GetLastInputInfo(ref lastInput);
return ((uint)Environment.TickCount - lastInput.dwTime);
}
}
"@
while ($true) {
$idleTime = [ActivityChecker]::GetIdleTime()
Write-Host "空闲时间: $($idleTime/1000)秒"
Start-Sleep -Seconds 1
}
C++(Windows API)
直接调用 Windows API
#include <windows.h>
#include <iostream>
int main() {
LASTINPUTINFO lii;
lii.cbSize = sizeof(LASTINPUTINFO);
while (true) {
if (GetLastInputInfo(&lii)) {
DWORD idleTime = GetTickCount() - lii.dwTime;
std::cout << "空闲时间: " << idleTime/1000 << "秒" << std::endl;
}
Sleep(1000);
}
return 0;
}
命令行工具(Windows)
使用 SysInternals 的 pslist 或 lastactivity
@echo off
:loop
for /f "tokens=2 delims==" %%a in ('wmic path Win32_PerfFormattedData_PerfOS_System get SystemUpTime /value') do set idletime=%%a
echo 系统运行时间: %idletime%秒
timeout /t 1 /nobreak >nul
goto loop
JavaScript(浏览器环境)
检测用户活动
let lastActivity = Date.now();
document.addEventListener('mousemove', () => lastActivity = Date.now());
document.addEventListener('keydown', () => lastActivity = Date.now());
setInterval(() => {
const idleTime = (Date.now() - lastActivity) / 1000;
console.log(`用户空闲: ${idleTime}秒`);
}, 1000);
实用场景代码
Python:检测并记录活动日志
from pynput import mouse, keyboard
from datetime import datetime
import json
events = []
def on_activity(event_type, detail):
events.append({
'time': datetime.now().isoformat(),
'type': event_type,
'detail': str(detail)
})
# 保存到文件
if len(events) >= 10:
with open('activity_log.json', 'a') as f:
json.dump(events, f)
f.write('\n')
events.clear()
# 启动监听
mouse.Listener(on_move=lambda x,y: on_activity('mouse_move', (x,y)),
on_click=lambda x,y,b,p: on_activity('mouse_click', (x,y,b,p))).start()
keyboard.Listener(on_press=lambda k: on_activity('key_press', k)).start()
input("监听中...按Enter停止")
AutoHotkey:空闲时自动锁定
#Persistent
SetTimer, CheckIdle, 5000 ; 每5秒检查
CheckIdle:
if (A_TimeIdlePhysical > 300000) { ; 5分钟无活动
DllCall("LockWorkStation") ; 锁定电脑
SoundBeep, 1000, 500
}
return
注意事项
- 权限问题:某些系统环境(如macOS)请求输入监听权限
- 性能影响:高频轮询可能影响系统性能,建议使用事件驱动
- 隐私考量:请确保符合法律法规和用户协议
- 跨平台差异:pynput支持Windows/Linux/macOS,AutoHotkey仅Windows
选择哪种方式取决于你的具体需求(Windows应用/游戏脚本/系统监控等)。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播