您当前的位置:首页 > 科普小常识 > 正文

python可以做按键精灵吗,python按键精灵-录制鼠标和键盘操作

关于【python可以做按键精灵吗】,今天犇涌小编给您分享一下,如果对您有所帮助别忘了关注本站哦。

python可以做按键精灵吗?如果每天需要重复操作,怎样做到一键重复?,我来为大家讲解一下关于python可以做按键精灵吗?跟着小编一起来看一看吧!

python可以做按键精灵吗,python按键精灵-录制鼠标和键盘操作

python可以做按键精灵吗

如果每天需要重复操作,怎样做到一键重复?

使用python2.7开发按键精灵

pyHook(安装地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook)

recode.py代码如下,记录鼠标键盘的操作

运行python recode.py

#!/usr/bin/env python# -*- coding: utf-8 -*- import pythoncomimport pyHookimport timeimport threadingimport datetimeimport sysimport win32apiimport win32conimport win32guifrom ctypes import *actions=[]_stoped = Falseclass POINT(Structure): _fields_ = [("x", c_ulong),("y", c_ulong)] def get_mouse_point(): po = POINT() windll.user32.GetCursorPos(byref(po)) return int(po.x), int(po.y)def logAction(e): po = get_mouse_point() seconds = getCurSec() if len(actions)>0 and e.MessageName=='mouse move' and actions[-1][0] == 'mouse move' and seconds-actions[-1][1]<0.05: actions[-1] = [e.MessageName,seconds,po[0],po[1]] else: actions.append([e.MessageName,seconds,po[0],po[1]])startLogTime = datetime.datetime.now()def getCurSec(): return (datetime.datetime.now() - startLogTime).total_seconds()def log(s): fobj.writelines(s) def onm ouseEvent(event): "处理鼠标事件" #log("Current Time:%s\n" % time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime())) #log("MessageName:%s\n" % str(event.MessageName)) #log("Position:%s\n" % str(event.Position)) global _stoped if _stoped: return True logAction(event) return True def onKeyboardEvent(event): "处理键盘事件" #log("Current Time:%s\n" % time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime())) #log("MessageName:%s\n" % str(event.MessageName)) #log("Ascii_code: %d\n" % event.Ascii) #log("Ascii_char:%s\n" % chr(event.Ascii)) #log("Key:%s\n" % str(event.Key)) #logAction(event) global _stoped if event.KeyID == 0x2C: _stoped = True if _stoped: return True actions.append([event.MessageName,getCurSec(),event.KeyID,event.Key]) return True def start_log(): #创建hook句柄 hm = pyHook.HookManager() #监控键盘 hm.KeyDown = onKeyboardEvent hm.KeyUp = onKeyboardEvent hm.HookKeyboard() #监控鼠标 hm.MouseAll = onm ouseEvent hm.HookMouse() #循环获取消息 pythoncom.PumpMessages() if __name__ == "__main__": user32 = windll.user32 hwnd = user32.GetForegroundWindow() win32gui.CloseWindow(hwnd) # 窗口最小化 t4=threading.Thread(target=start_log,args=()) t4.setDaemon(True) t4.start() print 'begin to record' while not _stoped: time.sleep(1) print 'end to record' #打开日志文件 file_name = "hook_log.txt" if len(sys.argv) > 1: file_name = sys.argv[1] fobj = open(file_name, 'w') content = '\n'.join(str(','.join(str(s1) for s1 in s)) for s in actions) fobj.write(content) #关闭日志文件 fobj.close()

运行之后记录操作,当按下 PrtSc 键后停止记录,得到log文件内容如下

mouse move,2.198,479,305mouse left down,2.434,480,305mouse left up,2.546,480,305key down,3.238,84,Tkey up,3.374,84,Tkey down,3.382,72,Hkey down,3.47,73,Ikey up,3.542,72,Hkey up,3.622,73,Ikey down,3.686,83,Skey up,3.798,83,Skey down,4.19,32,Spacekey up,4.318,32,Spacekey down,4.366,73,Ikey down,4.454,83,Skey up,4.462,73,Ikey up,4.582,83,Skey down,4.67,32,Spacekey up,4.774,32,Spacekey down,4.982,84,Tkey down,5.062,69,Ekey up,5.15,84,Tkey down,5.166,83,Skey down,5.27,84,Tkey up,5.31,69,Ekey up,5.318,83,Skey up,5.398,84,Tmouse move,6.086,481,306

记录播放

python play.py

play.py代码如下

## _*_ coding:UTF-8 _*_ import win32apiimport win32conimport win32guifrom ctypes import *import timeimport sys,ctypesif sys.getdefaultencoding() != 'utf-8': reload(sys) sys.setdefaultencoding('utf-8') VK_CODE = { 'backspace':0x08, 'tab':0x09, 'clear':0x0C, 'enter':0x0D, 'shift':0x10, 'ctrl':0x11, 'alt':0x12, 'pause':0x13, 'caps_lock':0x14, 'esc':0x1B, 'spacebar':0x20, ' ':0x20, 'page_up':0x21, 'page_down':0x22, 'end':0x23, 'home':0x24, 'left_arrow':0x25, 'up_arrow':0x26, 'right_arrow':0x27, 'down_arrow':0x28, 'select':0x29, 'print':0x2A, 'execute':0x2B, 'print_screen':0x2C, 'ins':0x2D, 'del':0x2E, 'help':0x2F, '0':0x30, '1':0x31, '2':0x32, '3':0x33, '4':0x34, '5':0x35, '6':0x36, '7':0x37, '8':0x38, '9':0x39, 'a':0x41, 'b':0x42, 'c':0x43, 'd':0x44, 'e':0x45, 'f':0x46, 'g':0x47, 'h':0x48, 'i':0x49, 'j':0x4A, 'k':0x4B, 'l':0x4C, 'm':0x4D, 'n':0x4E, 'o':0x4F, 'p':0x50, 'q':0x51, 'r':0x52, 's':0x53, 't':0x54, 'u':0x55, 'v':0x56, 'w':0x57, 'x':0x58, 'y':0x59, 'z':0x5A, 'numpad_0':0x60, 'numpad_1':0x61, 'numpad_2':0x62, 'numpad_3':0x63, 'numpad_4':0x64, 'numpad_5':0x65, 'numpad_6':0x66, 'numpad_7':0x67, 'numpad_8':0x68, 'numpad_9':0x69, 'multiply_key':0x6A, 'add_key':0x6B, 'separator_key':0x6C, 'subtract_key':0x6D, 'decimal_key':0x6E, 'divide_key':0x6F, 'F1':0x70, 'F2':0x71, 'F3':0x72, 'F4':0x73, 'F5':0x74, 'F6':0x75, 'F7':0x76, 'F8':0x77, 'F9':0x78, 'F10':0x79, 'F11':0x7A, 'F12':0x7B, 'F13':0x7C, 'F14':0x7D, 'F15':0x7E, 'F16':0x7F, 'F17':0x80, 'F18':0x81, 'F19':0x82, 'F20':0x83, 'F21':0x84, 'F22':0x85, 'F23':0x86, 'F24':0x87, 'num_lock':0x90, 'scroll_lock':0x91, 'left_shift':0xA0, 'right_shift ':0xA1, 'left_control':0xA2, 'right_control':0xA3, 'left_menu':0xA4, 'right_menu':0xA5, 'browser_back':0xA6, 'browser_forward':0xA7, 'browser_refresh':0xA8, 'browser_stop':0xA9, 'browser_search':0xAA, 'browser_favorites':0xAB, 'browser_start_and_home':0xAC, 'volume_mute':0xAD, 'volume_Down':0xAE, 'volume_up':0xAF, 'next_track':0xB0, 'previous_track':0xB1, 'stop_media':0xB2, 'play/pause_media':0xB3, 'start_mail':0xB4, 'select_media':0xB5, 'start_application_1':0xB6, 'start_application_2':0xB7, 'attn_key':0xF6, 'crsel_key':0xF7, 'exsel_key':0xF8, 'play_key':0xFA, 'zoom_key':0xFB, 'clear_key':0xFE, ' ':0xBB, ',':0xBC, '-':0xBD, '.':0xBE, '/':0xBF, '`':0xC0, ';':0xBA, '[':0xDB, '\\':0xDC, ']':0xDD, "'":0xDE, '`':0xC0} class POINT(Structure): _fields_ = [("x", c_ulong),("y", c_ulong)] def get_mouse_point(): po = POINT() windll.user32.GetCursorPos(byref(po)) return int(po.x), int(po.y) def mouse_click(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) time.sleep(0.05) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)def mouse_dclick(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) time.sleep(0.05) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) def mouse_move(x,y): windll.user32.SetCursorPos(x, y)def mouse_leftdown(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)def mouse_leftup(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)def mouse_rightdown(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)def mouse_rightup(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)def key_down(vc): win32api.keybd_event(vc,0,0,0)def key_up(vc): win32api.keybd_event(vc,0,win32con.KEYEVENTF_KEYUP,0) def key_input(str=''): for c in str: win32api.keybd_event(VK_CODE[c],0,0,0) win32api.keybd_event(VK_CODE[c],0,win32con.KEYEVENTF_KEYUP,0) time.sleep(0.01)def setClipboard(mystr): '''把字符串放到剪切板中,成功返回1,失败返回0''' u=ctypes.WinDLL('user32.dll') k=ctypes.WinDLL('kernel32.dll') s=mystr.encode('utf-16') s=s[2:] b'\0\0' ss=ctypes.c_char_p(s) u.OpenClipboard(0) u.EmptyClipboard() k.GlobalAlloc.argtypes=[ctypes.c_uint32,ctypes.c_uint32] try: cb=k.GlobalAlloc(0,len(s)) cb=ctypes.c_void_p(cb) ctypes.memmove(cb,ss,len(s)) rr=u.SetClipboardData(13,cb) # 13->unicode finally: u.CloseClipboard() if rr==0: return 0 else: return 1 def key_input2(s): setClipboard(s) #ctrl v key_down(0x11) key_down(0x56) key_up(0x56) key_up(0x11)def runActrion(actions): alen = len(actions) for i in range(alen): action = actions[i] t = action[0] if t =='mouse left down': mouse_leftdown(int(action[2]),int(action[3])) elif t =='mouse left up': mouse_leftup(int(action[2]),int(action[3])) elif t =='mouse right down': mouse_rightdown(int(action[2]),int(action[3])) elif t =='mouse right up': mouse_rightup(int(action[2]),int(action[3])) elif t =='key up': key_up(int(action[2])) elif t =='key down' or t =='key sys down': key_down(int(action[2])) elif t=='key input': key_input2(action[2]) elif t =='mouse move': mouse_move(int(action[2]),int(action[3])) if i < alen-1: time.sleep(float(actions[i 1][1])-float(action[1]))if __name__ == "__main__": user32 = windll.user32 hwnd = user32.GetForegroundWindow() win32gui.CloseWindow(hwnd) # 窗口最小化 fname = 'hook_log.txt' if len(sys.argv) > 1: fname = sys.argv[1] actions = [] for line in open(fname): if len(line.strip())>0: actions.append(line.split(',')) times = 1 if len(sys.argv) > 2: times = int(sys.argv[2]) for i in range(times): runActrion(actions)

更多功能可以自己去修改代码

可以录制和播放不同脚本,如登录游戏,登录邮箱等等.本人用c#做了个界面,可以显示记录的不同脚本,并可以设置播放次数等功能

python recode.py game.txt

python play.py game.txt

本文关键词:按键精灵 python程序互通,python和按键精灵写游戏辅助哪个好,python写按键脚本,python 按键精灵一样的开发工具,python 做按键精灵。这就是关于《python可以做按键精灵吗,python按键精灵-录制鼠标和键盘操作》的所有内容,希望对您能有所帮助!


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 全角空格怎么输入,空格符号怎么写(人民币符号“¥”的来历)

下一篇: 叶璇香港电视剧经典,经典老剧天下第一



推荐阅读