在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库。
没错,我真是个垃圾!!!!
白嫖大哥们,点个赞,下次再来!!
诸君珍重!!!