# -*- coding: utf-8 -*- #
'''
模块功能:
截取电脑的按键操作和鼠标操作,保存为文件形式
按下键盘的Scroll键保存缓存中的数据,终止记录时可以用这样的操作来保存完整的数据
'''
import
pythoncom
import
pyHook
import
sys
import
datetime
# make a copy of original stdout route
stdout_backup = sys.stdout
# define the log file that receives your log info
str_now = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
log_filename = 'msg' + str_now + '.log'
log_file = open(log_filename, "w")
# redirect print output to log file
sys.stdout = log_file
key_value = 0
def
onMouseEvent(event):
'''
Message ID:
513 - mouse left down
514 - mouse left up
516 - mouse right down
517 - mouse right up
519 - mouse middle down
520 - mouse middle up
522 - mouse wheel
输出格式: [事件ID ,发生的时间,坐标x ,坐标y ,滚轮值]
其中滚轮值为[-1,0,1] ,当事件为鼠标滚轮时,值为1或-1,其他情况下均为0
'''
"%3d,%8d,%4d,%4d,%2d" % (event.Message, event.Time, event.Position[0],
event.Position[1], event.Wheel)
#返回True以便将事件传给其它处理程序
#注意,这儿如果返回False,则鼠标事件将被全部拦截
#也就是说你的鼠标看起来会僵在那儿,似乎失去响应了
return
True
def
onKeyboardEvent(event):
'''
Message ID:
256 - key down
257 - key up
输出格式: [事件ID ,发生的时间, ASCII , VK , EXTEND]
其中滚轮值为[-1,0,1] ,当事件为鼠标滚轮时,值为1或-1,其他情况下均为0
'''
"%3d,%8d,%3d,%3d,%d" % (event.Message, event.Time, event.Ascii,
event.KeyID, event.Extended)
if event.KeyID == 0x91:
log_file.flush()
#同鼠标事件监听函数的返回值
return
True
def
main():
#创建一个"钩子"管理对象
hm = pyHook.HookManager()
#监听所有键盘事件
hm.KeyDown = onKeyboardEvent
hm.KeyUp = onKeyboardEvent
#设置键盘"钩子"
hm.HookKeyboard()
#监听所有鼠标按键事件
hm.MouseAllButtons = onMouseEvent
hm.MouseWheel = onMouseEvent
# MouseWheel
#设置鼠标"钩子"
hm.HookMouse()
#进入循环,如不手动关闭,程序将一直处于监听状态
pythoncom.PumpMessages()
if __name__ == "__main__":
main()