python 三种键盘记录器 based on pyhook,pynput,pygame

在python语言中使用键盘输入,其方式之多,令人发指。但是为什么我要写这篇文章呢?我乐意呀!哈哈哈。当然,同学发问了,老铁,你是闲出屁来了?
哼?怎么可能,我是闲的蛋疼。。。
在这里插入图片描述咱先把泌尿外科的事放一放,专心讲一下键盘记录器。第一部分,基于pygame的键盘记录:
1.代码部分:

#author:dager
#time:2020/7/4
#description:kdhz 
#coding:gbk

import pygame
import winsound
import os
import time

class kdhz(object):
    def __init__(self):
        self.zm=[i for i in 'abcdefghijklmnopqrstuvwxyz']
        self.getvoice()
        pygame.init()
        w,h=200,100
        pygame.display.set_mode((w,h))
        self.screen=pygame.display.get_surface()
        kdhz=pygame.image.load(os.getcwd()+'//img//'+'kdhz.png')
        self.kdhz=pygame.transform.scale(kdhz,(w,h))
    
    def getvoice(self):
        self.voice={
            'qdo':262,
            'qre':294,
            'qmi':330,
            'qfa':349,
            'qso':392,
            'qla':440,
            'qsi':494,
            'do':523,
            're':578,
            'mi':659,
            'fa':698,
            'so':784,
            'la':880,
            'si':988,
            'do1':1046,
            're1':1175,
            'mi1':1318,
            'fa1':1480,
            'so1':1568,
            'la1':1760,
            'si1':1976,
            'sqdo':277,
            'sqre':311,
            'sqfa':370,
            'sqso':415,
            'sqla':466
        }
        self.zm_key={}
        self.key=[]
        for i in self.voice.keys():
            self.key.append(i)
        for i in range(0,len(self.key)):
            self.zm_key[self.zm[i]]=self.key[i]
    
    def run(self):
        while True:
            for event in pygame.event.get():
                if event.type==pygame.QUIT:
                    pygame.display.quit()
                    quit()
                
                if event.type==pygame.KEYDOWN:
                    keys=pygame.key.get_pressed()
                    for i in self.zm:
                        if keys[ord(i)]:
                            self.play(i)
            self.screen.blit(self.kdhz,(0,0))
            pygame.display.update()
            
    def play(self,char):
        winsound.Beep(self.voice[self.zm_key[char]],300)

这是小弟写的一个用耳朵记住键盘的小游戏。周董直呼内行对不对,周董表示,找知道有这种东西我LOL只玩剑圣吗?开玩笑。。
在这里插入图片描述这个游戏的作用是什么呢?你的鼠标焦点必须在游戏面板上,然后你再按键盘,便会发出特定响声。我用了个蜂鸣器。很好用的!嘻嘻!!

那么问题来了,如果我焦点不在这上面呢,没问题,那我们就记录不了。。。
那你说个锤子!!!!
在这里插入图片描述别生气!太君,咱不是还有下一位花姑娘吗?Hook妹子,赶紧上来。
咳咳,一股骚浪贱的味道,不,我不是说hook,我说的是我。欸,各位大兄弟,看完能不能给个评论,点赞啥的,咱不容易呀!!

#author:dager
#time:2020/7/4
#description:Keyboarder Listener

#coding:gbk
import pythoncom
import pyHook
import time
import winsound

class Listener(object):
    def __init__(self):
        self.voice={
            'qdo':262,
            'qre':294,
            'qmi':330,
            'qfa':349,
            'qso':392,
            'qla':440,
            'qsi':494,
            'do':523,
            're':578,
            'mi':659,
            'fa':698,
            'so':784,
            'la':880,
            'si':988,
            'do1':1046,
            're1':1175,
            'mi1':1318,
            'fa1':1480,
            'so1':1568,
            'la1':1760,
            'si1':1976,
        }
        self.zm=[i for i in 'ABCDEFGHIJKLMNOPQRSTU']
        self.zm_key={}
        self.key=[]
        for i in self.voice.keys():
            self.key.append(i)
        for i in range(0,len(self.key)):
            self.zm_key[self.zm[i]]=self.key[i]
            
        self.hm=pyHook.HookManager()
        self.hm.KeyDown=self.onKeyboardEvent
        self.hm.HookKeyboard()
        pythoncom.PumpMessages()            
        
    def onKeyboardEvent(self,event):
        #print('Messagename:'+event.MessageName)
        #print('Message:'+str(event.Message))
        #print('Time:'+str(event.Time))
        #print('Window:'+str(event.Window))
        #print('WindowName:'+str(event.WindowName))
        #print('Ascii:'+str(event.Ascii))
        #print('Char_Ascii:'+chr(event.Ascii))
        #print('Key:'+event.Key)
        #print('KeyID:'+str(event.KeyID))
        #print('ScanCode:'+str(event.ScanCode))
        #print('Extended:'+str(event.Extended))
        #print('Injected:'+str(event.Injected))
        #print('Alt:'+str(event.Alt))
        print(event.Key)
        
        if event.Key in self.zm:
            #print(self.voice[self.zm_key[event.Key]])
            self.play(self.voice[self.zm_key[event.Key]])
        else:
            self.play(932)
            
        return True
        
    def play(self,yd):
        winsound.Beep(yd,200)

没错,熟悉的配方,熟悉的味道。
不过,Hook大妹子虽然功能齐全,但是有个问题,当你在一些编辑器里面,使用中文输入法,她就直接报错,然后就直接停止了。

就像这样!!!!
在这里插入图片描述咋地了?发生什么了?代码问题?是我写的不好吗?我可以改!
不好意思,你是个好人,只是hook妹子就是这样。去街坊(baidu)那里打听了一圈,说hook本身就是这样,这是个bug!!!
啊!!!同学本以为找到了真爱,没想到,欸。hook不行了!!!这种编辑器中文敏感自动猝死综合征,暂时咱还解决不了。蓝廋!
在这里插入图片描述没办法,继续来!!!
直到我们找到了pynput

#author:dager
#time:2020/7/6
#description:keybard Listener based on pynput

from pynput.keyboard import Key,Listener

class kbtool(object):
    def __init__(self):
        print('start_listen can start listen!!!')
        
    def on_press(self,key):
        print(format(key))
        if key==Key.esc:
            return False
        
    def on_release(self,key):
        print(format(key))
        
    def start_listen(self):
        print('Listening...')
        with Listener(on_press=self.on_press) as listener:
            listener.join()
            
            

真的,平淡才是真呀!!!
在这里插入图片描述最后,给一些同学普及一下知识。

同学们,你们是否有下载python模块时一直断网的情况。
是否感觉到网络千兆,下载10kb的无力感?
没错,我也曾有过困扰,知道有一天!我百度了一下!

国内源:

新版ubuntu要求使用https源,要注意。

清华:https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:http://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

华中理工大学:http://pypi.hustunique.com/

山东理工大学:http://pypi.sdutlinux.org/

豆瓣:http://pypi.douban.com/simple/
临时使用:

可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple

例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider,这样就会从清华这边的镜像去安装pyspider库。

没错,我真是个垃圾!!!!

在这里插入图片描述白嫖大哥们,点个赞,下次再来!!

诸君珍重!!!

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值