網(wǎng)上有很多關(guān)于自定義pos機(jī)鍵盤,windows+python按鍵精靈的知識,也有很多人為大家解答關(guān)于自定義pos機(jī)鍵盤的問題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
自定義pos機(jī)鍵盤
如果每天需要重復(fù)操作,怎樣做到一鍵重復(fù)?
使用python2.7開發(fā)按鍵精靈
pyHook(安裝地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook)
recode.py代碼如下,記錄鼠標(biāo)鍵盤的操作
運行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 onMouseEvent(event): "處理鼠標(biāo)事件" #log("Current Time:%s\" % time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime())) #log("MessageName:%s\" % str(event.MessageName)) #log("Position:%s\" % str(event.Position)) global _stoped if _stoped: return True logAction(event) return True def onKeyboardEvent(event): "處理鍵盤事件" #log("Current Time:%s\" % time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime())) #log("MessageName:%s\" % str(event.MessageName)) #log("Ascii_code: %d\" % event.Ascii) #log("Ascii_char:%s\" % chr(event.Ascii)) #log("Key:%s\" % 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(): #創(chuàng)建hook句柄 hm = pyHook.HookManager() #監(jiān)控鍵盤 hm.KeyDown = onKeyboardEvent hm.KeyUp = onKeyboardEvent hm.HookKeyboard() #監(jiān)控鼠標(biāo) hm.MouseAll = onMouseEvent hm.HookMouse() #循環(huán)獲取消息 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 = \'\\'.join(str(\',\'.join(str(s1) for s1 in s)) for s in actions) fobj.write(content) #關(guān)閉日志文件 fobj.close()
運行之后記錄操作,當(dāng)按下 PrtSc 鍵后停止記錄,得到log文件內(nèi)容如下
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#做了個界面,可以顯示記錄的不同腳本,并可以設(shè)置播放次數(shù)等功能
python recode.py game.txt
python play.py game.txt
以上就是關(guān)于自定義pos機(jī)鍵盤,windows+python按鍵精靈的知識,后面我們會繼續(xù)為大家整理關(guān)于自定義pos機(jī)鍵盤的知識,希望能夠幫助到大家!