自定義pos機鍵盤,windows+python按鍵精靈

 新聞資訊2  |   2023-07-04 09:23  |  投稿人:pos機之家

網上有很多關于自定義pos機鍵盤,windows+python按鍵精靈的知識,也有很多人為大家解答關于自定義pos機鍵盤的問題,今天pos機之家(www.tonybus.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、自定義pos機鍵盤

自定義pos機鍵盤

如果每天需要重復操作,怎樣做到一鍵重復?

使用python2.7開發按鍵精靈

pyHook(安裝地址:https://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 onMouseEvent(event): "處理鼠標事件" #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(): #創建hook句柄 hm = pyHook.HookManager() #監控鍵盤 hm.KeyDown = onKeyboardEvent hm.KeyUp = onKeyboardEvent hm.HookKeyboard() #監控鼠標 hm.MouseAll = onMouseEvent 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 = \'\\'.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

以上就是關于自定義pos機鍵盤,windows+python按鍵精靈的知識,后面我們會繼續為大家整理關于自定義pos機鍵盤的知識,希望能夠幫助到大家!

轉發請帶上網址:http://www.tonybus.com/newsone/79470.html

你可能會喜歡:

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 babsan@163.com 舉報,一經查實,本站將立刻刪除。