本文目录导读:

- Python - keyboard库(最简单)
- Python - pynput库(跨平台)
- Windows PowerShell(无需额外软件)
- JavaScript - 网页版
- 完整日志记录版
- 安装依赖
- 使用建议
我来为您介绍几种检测键盘输入的方法,适用于不同场景:
Python - keyboard库(最简单)
import keyboard
import time
def on_key_press(event):
"""检测按键按下"""
if event.event_type == 'down':
print(f"按键 {event.name} 被按下")
def on_key_release(event):
"""检测按键释放"""
if event.event_type == 'up':
print(f"按键 {event.name} 被释放")
# 注册全局事件监听
keyboard.hook(on_key_press)
keyboard.hook(on_key_release)
# 打印提示信息
print("键盘检测已启动,按ESC退出...")
# 保持程序运行
while True:
if keyboard.is_pressed('esc'):
print("退出程序")
break
time.sleep(0.1)
keyboard.unhook_all()
Python - pynput库(跨平台)
from pynput import keyboard
import threading
import time
class KeyboardMonitor:
def __init__(self):
self.listener = None
self.running = True
def on_press(self, key):
"""按键按下时调用"""
try:
# 尝试获取按键字符
print(f"按下: {key.char}")
except AttributeError:
# 特殊键处理
special_keys = {
keyboard.Key.space: "空格",
keyboard.Key.enter: "回车",
keyboard.Key.backspace: "退格",
keyboard.Key.tab: "Tab",
keyboard.Key.esc: "Esc",
keyboard.Key.shift: "Shift",
keyboard.Key.ctrl_l: "Ctrl(左)",
keyboard.Key.ctrl_r: "Ctrl(右)",
keyboard.Key.alt_l: "Alt(左)",
keyboard.Key.alt_r: "Alt(右)"
}
if key in special_keys:
print(f"按下: {special_keys[key]}")
else:
print(f"按下: {key}")
# 检测退出条件
if key == keyboard.Key.esc:
return False # 返回False停止监听
def on_release(self, key):
"""按键释放时调用"""
try:
print(f"释放: {key.char}")
except AttributeError:
print(f"释放: {key}")
def start(self):
"""启动监听"""
with keyboard.Listener(
on_press=self.on_press,
on_release=self.on_release
) as listener:
self.listener = listener
print("键盘监听已启动(按Esc退出)...")
listener.join()
def stop(self):
"""停止监听"""
if self.listener:
self.listener.stop()
# 使用示例
monitor = KeyboardMonitor()
try:
monitor.start()
except KeyboardInterrupt:
monitor.stop()
print("\n程序已停止")
Windows PowerShell(无需额外软件)
# 检测键盘按键的小工具
Add-Type -AssemblyName System.Windows.Forms
$lastKeys = @()
$timer = New-Object System.Windows.Forms.Timer
$timer.Interval = 100
$button = New-Object System.Windows.Forms.Button
$form = New-Object System.Windows.Forms.Form
$form.Text = "键盘检测工具"
$form.Size = New-Object System.Drawing.Size(400, 300)
$form.StartPosition = "CenterScreen"
$label = New-Object System.Windows.Forms.Label
$label.Text = "按任意键,按ESC退出"
$label.AutoSize = $true
$label.Location = New-Object System.Drawing.Point(100, 100)
$form.Controls.Add($label)
$form.Add_KeyDown({
param($sender, $e)
$keyName = $e.KeyCode.ToString()
$label.Text = "按键: $keyName"
if ($e.KeyCode -eq [System.Windows.Forms.Keys]::Escape) {
$form.Close()
}
})
$form.Add_Shown({
$form.Activate()
})
[System.Windows.Forms.Application]::Run($form)
JavaScript - 网页版
<!DOCTYPE html>
<html>
<head>键盘检测工具</title>
<style>
body {
font-family: Arial, sans-serif;
padding: 20px;
background: #f4f4f4;
}
#key-display {
width: 300px;
padding: 20px;
background: white;
border-radius: 10px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
margin: 20px auto;
text-align: center;
}
.key-detail {
margin: 10px 0;
color: #333;
}
#key-chart {
margin-top: 20px;
text-align: center;
}
</style>
</head>
<body>
<div id="key-display">
<h2>键盘检测日志</h2>
<div id="last-key">等待按键...</div>
</div>
<div id="key-chart"></div>
<script>
const keyLog = [];
document.addEventListener('keydown', (event) => {
const keyName = event.key;
const keyCode = event.keyCode;
const time = new Date().toLocaleTimeString();
console.log(`按键: ${keyName} (代码: ${keyCode}) 时间: ${time}`);
// 更新界面
document.getElementById('last-key').innerHTML = `
<p>按下的键: <strong>${keyName}</strong></p>
<p>键码: ${keyCode}</p>
<p>时间: ${time}</p>
`;
// 记录日志
keyLog.push({
key: keyName,
code: keyCode,
time: time
});
// 按ESC清除记录
if (event.key === 'Escape') {
keyLog.length = 0;
document.getElementById('key-chart').innerHTML = '记录已清除';
}
// 显示最近5次按键
if (keyLog.length > 0) {
document.getElementById('key-chart').innerHTML = `
<h3>最近按键记录:</h3>
${keyLog.slice(-5).map(record =>
`<p>${record.time} - ${record.key} (${record.code})</p>`
).join('')}
`;
}
});
// 防止默认行为
document.addEventListener('keydown', (event) => {
if (event.key === 'F12') {
event.preventDefault();
}
});
</script>
</body>
</html>
完整日志记录版
import keyboard
import json
import time
from datetime import datetime
class KeyboardLogger:
def __init__(self, log_file="key_log.txt"):
self.log_file = log_file
self.log_data = []
self.running = True
def on_event(self, event):
"""处理键盘事件"""
if event.event_type == 'down':
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 记录按键信息
entry = {
"timestamp": timestamp,
"key": event.name,
"scan_code": event.scan_code,
"is_pressed": True
}
self.log_data.append(entry)
self.save_log()
# 实时输出
print(f"[{timestamp}] 按键: {event.name}")
def save_log(self):
"""保存日志到文件"""
try:
with open(self.log_file, 'a', encoding='utf-8') as f:
for entry in self.log_data:
f.write(json.dumps(entry) + "\n")
self.log_data.clear() # 清空已保存的数据
except Exception as e:
print(f"保存日志失败: {e}")
def start(self):
"""启动键盘监听"""
print("键盘监听已启动...")
print("按 Ctrl+C 停止记录")
try:
keyboard.hook(self.on_event)
keyboard.wait('ctrl+c') # 等待Ctrl+C结束
except KeyboardInterrupt:
pass
finally:
keyboard.unhook_all()
print("监听已停止")
# 使用示例
if __name__ == "__main__":
logger = KeyboardLogger("keyboard_log.txt")
logger.start()
安装依赖
# Python keyboard库 pip install keyboard # 或者 # Python pynput库(跨平台更好) pip install pynput
使用建议
- 权限要求:Linux系统可能需要root权限
- 后台运行:可添加daemonize功能让程序在后台运行
- 安全考虑:请确保合法使用,不要用于恶意目的
- 性能优化:大批量记录时使用异步写入
根据您的具体需求选择合适的方法,如果只是简单测试,推荐使用 Python keyboard 库;如果需要跨平台支持,建议使用 pynput。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播