[无聊转载备用]
Idea
作为一个每天有一半时间都在电脑旁的人,无时无刻不在敲击着键盘,点击着鼠标。有一天,我突然很想知道在一天的时间内,在我轻盈的指法下面,键盘被我狂敲了多少下,鼠标又被我点击了多少次。甚至更具体一些,键盘上哪些键挨的敲击次数更多呢?想想也觉得挺有意思的。
Learing
有了想法,接着就是上(寻)网(找)学(代)习(码)了。既然要记录键盘敲击和鼠标点击的次数,那就得监听键盘和鼠标的事件。在搜索过程中,了解到了钩子函数这个概念。想要学习的同学可以看下这篇博客
毕竟我只是想实现一下功能,也就没太深入学习。对比了一些各种语言对于监听事件的实现代码,发现Python简直不能再简洁了,果断使用Python。
Coding(Copying)
现在想法、概念知识和所用工具都具备了,剩下的就是用代码去实现。Python环境自然不用多说,除此之外还需要几个第三方的库。主要参考这篇博客,自己的想法其实别人早就已经实现了。
当然别人的代码并不完全符合自己的需求,我不需要记录键盘、鼠标点击事件过于详细的信息,我需要记录的仅仅是次数。在前人的代码基础上修改一番即可。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pythoncom
import pyHook
import time import win32api """ def onMouseEvent(event): "处理鼠标事件" fobj.writelines('-' * 20 + 'MouseEvent Begin' + '-' * 20 + '\n') fobj.writelines("Current Time:%s\n" % time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime())) fobj.writelines("MessageName:%s\n" % str(event.MessageName)) fobj.writelines("Message:%d\n" % event.Message) fobj.writelines("Time_sec:%d\n" % event.Time) fobj.writelines("Window:%s\n" % str(event.Window)) fobj.writelines("WindowName:%s\n" % str(event.WindowName)) fobj.writelines("Position:%s\n" % str(event.Position)) fobj.writelines('-' * 20 + 'MouseEvent End' + '-' * 20 + '\n') return True """ def onMouse_rightup(event): # 监听鼠标左键按下事件 次数加1 global right_up_num right_up_num += 1 return True def onMouse_leftup(event): # 监听鼠标左键弹起事件 次数加1 global left_up_num left_up_num += 1 return True def onKeyboardEvent(event): # 处理键盘事件 定义各个键位全局变量,记录敲击次数 global key_a_num global key_b_num global key_c_num global key_d_num global key_e_num global key_f_num global key_g_num global key_h_num global key_i_num global key_j_num global key_k_num global key_l_num global key_m_num global key_n_num global key_o_num global key_p_num global key_q_num global key_r_num global key_s_num global key_t_num global key_u_num global key_v_num global key_w_num global key_x_num global key_y_num global key_z_num global key_enter_num global key_back_num global key_1_num global key_2_num global key_3_num global key_4_num global key_5_num global key_6_num global key_7_num global key_8_num global key_9_num global key_0_num global key_oem_3_num #~ global key_oem_minus_num #- global key_oem_plus_num #+ global key_tab_num #tab global key_cap_num #caps global key_lshift_num #left shift global key_lctrl_num #left ctrl global key_lwin_num global key_lalt_num global key_space_num global key_rshift_num #left shift global key_rctrl_num #left ctrl global key_rwin_num global key_ralt_num global key_oem_comma_num #, global key_oem_period_num #. global key_oem_2_num #/ global key_oem_1_num #; global key_oem_7_num #' global key_oem_4_num #[ global key_oem_5_num #] global key_oem_6_num #\ global key_left_num #左 global key_right_num #右 global key_up_num #上 global key_down_num #下 global key_delete_num #delete global key_end_num #end global key_next_num #page down global key_insert_num #insert global key_home_num #home global key_prior_num #page up global key_snapshot_num #print screen global key_scroll_num #scroll lock global key_pause_num #pause global key_escape_num #esc global key_f1_num global key_f2_num global key_f3_num global key_f4_num global key_f5_num global key_f6_num global key_f7_num global key_f8_num global key_f9_num global key_f10_num global key_f11_num global key_f12_num global key_numpad0_num global key_numpad1_num global key_numpad2_num global key_numpad3_num global key_numpad4_num global key_numpad5_num global key_numpad6_num global key_numpad7_num global key_numpad8_num global key_numpad9_num global key_numlock_num global key_divide_num global key_multiply_num global key_subtract_num global key_add_num global key_decimal_num global key_total_num #总敲击次数 fobj.write("%s" % str(event.Key)+" ") s=str(event.Key) if s=='A': key_a_num+=1 key_total_num+=1 elif s=='B': key_b_num+=1 key_total_num+=1 elif s=='C': key_c_num+=1 key_total_num+=1 elif s=='D': key_d_num+=1 key_total_num+=1 elif s=='E': key_e_num+=1 key_total_num+=1 elif s=='F': key_f_num+=1 key_total_num+=1 elif s=='G': key_g_num+=1 key_total_num+=1 elif s=='H': key_h_num+=1 key_total_num+=1 elif s=='I': key_i_num+=1 key_total_num+=1 elif s=='J': key_j_num+=1 key_total_num+=1 elif s=='K': key_k_num+=1 key_total_num+=1 elif s=='L': key_l_num+=1 key_total_num+=1 elif s=='M': key_m_num+=1 key_total_num+=1 elif s=='N': key_n_num+=1 key_total_num+=1 elif s=='O': key_o_num+=1 key_total_num+=1 elif s=='P': key_p_num+=1 key_total_num+=1 elif s=='Q': key_q_num+=1 key_total_num+=1 elif s=='R': key_r_num+=1 key_total_num+=1 elif s=='S': key_s_num+=1 key_total_num+=1 elif s=='T': key_t_num+=1 key_total_num+=1