python自动粘贴文字_使用Python自动检测键盘的焦点并从剪贴板粘贴

importtimeimportstringimportctypesimportctypes.wintypes# part one: clipboard text retrievalCF_UNICODETEXT=13# unicode text format; terminates with a linefeedOpenClipboard=ctypes.windll.user32.OpenClipboardOpenClipboard.argtypes=ctypes.wintypes.HWND,OpenClipboard.restype=ctypes.wintypes.BOOLGetClipboardData=ctypes.windll.user32.GetClipboardDataGetClipboardData.argtypes=ctypes.wintypes.UINT,GetClipboardData.restype=ctypes.wintypes.HANDLEGlobalLock=ctypes.windll.kernel32.GlobalLockGlobalLock.argtypes=ctypes.wintypes.HGLOBAL,GlobalLock.restype=ctypes.wintypes.LPVOIDGlobalUnlock=ctypes.windll.kernel32.GlobalUnlockGlobalUnlock.argtypes=ctypes.wintypes.HGLOBAL,GlobalUnlock.restype=ctypes.wintypes.BOOLCloseClipboard=ctypes.windll.user32.CloseClipboardCloseClipboard.argtypes=NoneCloseClipboard.restype=ctypes.wintypes.BOOLdefget_clipboard_text():text=""ifOpenClipboard(None):h_clip_mem=GetClipboardData(CF_UNICODETEXT)text=ctypes.wstring_at(GlobalLock(h_clip_mem))GlobalUnlock(h_clip_mem)CloseClipboard()returntext

CB_TEXT=get_clipboard_text()# part two: typing it into the focused element of a windowLONG=ctypes.c_long

DWORD=ctypes.c_ulong

ULONG_PTR=ctypes.POINTER(DWORD)WORD=ctypes.c_ushort

VK_SHIFT=0x10# Shift key# special keysVK_OEM_1=0xBAVK_OEM_PLUS=0xBBVK_OEM_COMMA=0xBCVK_OEM_MINUS=0xBDVK_OEM_PERIOD=0xBEVK_OEM_2=0xBFVK_OEM_3=0xC0VK_OEM_4=0xDBVK_OEM_5=0xDCVK_OEM_6=0xDDVK_OEM_7=0xDEKEYEVENTF_KEYUP=0x0002# Releases the keyINPUT_KEYBOARD=1UPPER=frozenset('~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?')LOWER=frozenset("`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./")ORDER=string.ascii_letters+string.digits+' \b\r\t'ALTER=dict(zip('!@#$%^&*()','1234567890'))OTHER={'`':VK_OEM_3,'~':VK_OEM_3,'-':VK_OEM_MINUS,'_':VK_OEM_MINUS,'=':VK_OEM_PLUS,'+':VK_OEM_PLUS,'[':VK_OEM_4,'{':VK_OEM_4,']':VK_OEM_6,'}':VK_OEM_6,'\\':VK_OEM_5,'|':VK_OEM_5,';':VK_OEM_1,':':VK_OEM_1,"'":VK_OEM_7,'"':VK_OEM_7,',':VK_OEM_COMMA,'':VK_OEM_PERIOD,'/':VK_OEM_2,'?':VK_OEM_2}classKEYBDINPUT(ctypes.Structure):_fields_=(('wVk',WORD),('wScan',WORD),('dwFlags',DWORD),('time',DWORD),('dwExtraInfo',ULONG_PTR))classINPUT(ctypes.Structure):_fields_=('type',DWORD),('ki',KEYBDINPUT),('pad',ctypes.c_ubyte*8)defInput(structure):returnINPUT(INPUT_KEYBOARD,structure)defKeyboardInput(code,flags):returnKEYBDINPUT(code,code,flags,0,None)defKeyboard(code,flags=0):returnInput(KeyboardInput(code,flags))defSendInput(*inputs):nInputs=len(inputs)LPINPUT=INPUT*nInputs

pInputs=LPINPUT(*inputs)cbSize=ctypes.c_int(ctypes.sizeof(INPUT))returnctypes.windll.user32.SendInput(nInputs,pInputs,cbSize)defstream(string):mode=Falseforcharacterinstring.replace('\r\n','\r').replace('\n','\r'):ifmodeandcharacterinLOWERornotmodeandcharacterinUPPER:yieldKeyboard(VK_SHIFT,modeandKEYEVENTF_KEYUP)mode=notmode

character=ALTER.get(character,character)ifcharacterinORDER:code=ord(character.upper())elifcharacterinOTHER:code=OTHER[character]else:continueraiseValueError('Undecoded')yieldKeyboard(code)yieldKeyboard(code,KEYEVENTF_KEYUP)ifmode:yieldKeyboard(VK_SHIFT,KEYEVENTF_KEYUP)defsend_clipboard():forkinstream(CB_TEXT+'\r'):SendInput(k)defdemo(wait=3):time.sleep(wait)send_clipboard()if__name__=='__main__':demo()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值