在 Python 2.7 中模拟按键事件 [英] Simulating a key press event in Python 2.7
问题描述
我想要做的是从 Windows 上的 Python 脚本级别按任意键盘键.我试过 SendKeys,但它只适用于 python 2.6.我尝试过的其他方法包括
导入 win32com.clientwin32com.client.Dispatch("WScript.Shell").SendKeys('要输入的字符串')
只允许从脚本级别输入字符串,但不允许按 ENTER 和其他特殊"键.
因此,我的问题是:如何从 python 脚本级别模拟任何键盘按键事件,包括特殊"事件,如 ENTER、CTRL、ESC 等.
如果可以在任何指定时间内按住某个键并按下 Alt+F4 等组合键,这也将非常有用.
我在一年多前写了这段代码,所以它并不完美,但它有效:
from win32api import keybd_event导入时间随机导入梳子 = {'一种': ['转移','一种'],'乙':['转移','b'],'C': ['转移','C'],'D':['转移','d'],'E':['转移','e'],'F': ['转移','F'],'G': ['转移','G'],'H': ['转移','H'],'一世': ['转移','一世'],'J':['转移','j'],'K':['转移','k'],'L':['转移','l'],'M':['转移','我'],'N':['转移','n'],'O':['转移','o'],'P':['转移','p'],'R':['转移','r'],'S':['转移','],'T':['转移','t'],'你':['转移','你'],'W':['转移','w'],'X': ['转移','X'],'Y':['转移','y'],'Z':['转移','z'],'V':['转移','v'],'问':['转移','q'],?":['转移','/'],'>': ['转移','.'],'<': ['转移',','],'"': ['转移',"'"],':': ['转移',';'],'|': ['转移','\\'],'}':['转移',']'],'{': ['转移','['],'+': ['转移','='],'_':['转移','-'],'!': ['转移','1'],'@':['转移','2'],'#':['转移','3'],'$': ['转移','4'],'%': ['转移','5'],'^':['转移','6'],'&': ['转移','7'],'*': ['转移','8'],'(': ['转移','9'],')': ['转移','0'] }基数 = {'0':48,'1':49,'2':50,'3':51,'4': 52,'5': 53,'6':54,'7':55,'8': 56,'9': 57,'一':65,'b': 66,'c': 67,'d': 68,'e': 69,'f':70,'g': 71,'h': 72,'我':73,'j': 74,'k': 75,'l': 76,'米':77,'n': 78,'o': 79,'p': 80,'q': 81,'r': 82,'s': 83,'t': 84,'你':85,'v': 86,'w': 87,'x': 88,'y': 89,'z':90,'.': 190,'-': 189,',': 188,'=': 187,'/': 191,';': 186,'[': 219,']':221,'\\': 220,'":222,'ALT': 18,'标签':9,'CAPSLOCK': 20,'输入':13,'BS': 8,'CTRL': 17,'ESC': 27,' ': 32,'结束':35,'向下':40,'左': 37,'向上':38,'正确':39,'选择':41,'PRINTSCR': 44,'INS': 45,'DEL': 46,'LWIN': 91,'RWIN': 92,'LSHIFT': 160,'移位':161,'LCTRL': 162,'RCTRL': 163,'音量':175,'DOLDOWN':174,'NUMLOCK':144,'滚动':145 }def KeyUp(Key):keybd_event(Key, 0, 2, 0)def KeyDown(键):keybd_event(Key, 0, 1, 0)def 按(键,速度=1):休息时间 = 0.05/速度如果键入 Base:键 = 基 [键]键下(键)time.sleep(rest_time)KeyUp(键)返回真如果键入梳子:KeyDown(Base[Combs[Key][0]])time.sleep(rest_time)KeyDown(Base[Combs[Key][1]])time.sleep(rest_time)KeyUp(Base[Combs[Key][1]])time.sleep(rest_time)KeyUp(Base[Combs[Key][0]])返回真返回错误def 写入(Str,速度 = 1):对于 Str 中的 s:按(s,速度)time.sleep((0.1 + random.random()/10.0)/float(speed))
示例:
<预><代码>>>>Write('Hello, World!', speed=3)你好,世界!>>>按('输入')如果你想实现更多的键,那么你可以找到它们的代码 此处.只需将这些键添加到 Base 字典中即可.
What I want to do is to press any keyboard key from the Python script level on Windows. I have tried SendKeys but it works only on python 2.6. Other methods that I have tried including
import win32com.client
win32com.client.Dispatch("WScript.Shell").SendKeys('String to be typed')
allow only to type strings from the script level but dont allow to press ENTER and other 'special' keys.
Therefore my question is: How can I simulate any keyboard key press event from python script level including 'special' ones like ENTER, CTRL, ESC etc.
It would be also very helpful if it is possible to hold a key pressed down for any specified time and press a combination of keys like Alt+F4.
I wrote this code more than 1 year ago so it is not perfect but it works:
from win32api import keybd_event
import time
import random
Combs = {
'A': [
'SHIFT',
'a'],
'B': [
'SHIFT',
'b'],
'C': [
'SHIFT',
'c'],
'D': [
'SHIFT',
'd'],
'E': [
'SHIFT',
'e'],
'F': [
'SHIFT',
'f'],
'G': [
'SHIFT',
'g'],
'H': [
'SHIFT',
'h'],
'I': [
'SHIFT',
'i'],
'J': [
'SHIFT',
'j'],
'K': [
'SHIFT',
'k'],
'L': [
'SHIFT',
'l'],
'M': [
'SHIFT',
'm'],
'N': [
'SHIFT',
'n'],
'O': [
'SHIFT',
'o'],
'P': [
'SHIFT',
'p'],
'R': [
'SHIFT',
'r'],
'S': [
'SHIFT',
's'],
'T': [
'SHIFT',
't'],
'U': [
'SHIFT',
'u'],
'W': [
'SHIFT',
'w'],
'X': [
'SHIFT',
'x'],
'Y': [
'SHIFT',
'y'],
'Z': [
'SHIFT',
'z'],
'V': [
'SHIFT',
'v'],
'Q': [
'SHIFT',
'q'],
'?': [
'SHIFT',
'/'],
'>': [
'SHIFT',
'.'],
'<': [
'SHIFT',
','],
'"': [
'SHIFT',
"'"],
':': [
'SHIFT',
';'],
'|': [
'SHIFT',
'\\'],
'}': [
'SHIFT',
']'],
'{': [
'SHIFT',
'['],
'+': [
'SHIFT',
'='],
'_': [
'SHIFT',
'-'],
'!': [
'SHIFT',
'1'],
'@': [
'SHIFT',
'2'],
'#': [
'SHIFT',
'3'],
'$': [
'SHIFT',
'4'],
'%': [
'SHIFT',
'5'],
'^': [
'SHIFT',
'6'],
'&': [
'SHIFT',
'7'],
'*': [
'SHIFT',
'8'],
'(': [
'SHIFT',
'9'],
')': [
'SHIFT',
'0'] }
Base = {
'0': 48,
'1': 49,
'2': 50,
'3': 51,
'4': 52,
'5': 53,
'6': 54,
'7': 55,
'8': 56,
'9': 57,
'a': 65,
'b': 66,
'c': 67,
'd': 68,
'e': 69,
'f': 70,
'g': 71,
'h': 72,
'i': 73,
'j': 74,
'k': 75,
'l': 76,
'm': 77,
'n': 78,
'o': 79,
'p': 80,
'q': 81,
'r': 82,
's': 83,
't': 84,
'u': 85,
'v': 86,
'w': 87,
'x': 88,
'y': 89,
'z': 90,
'.': 190,
'-': 189,
',': 188,
'=': 187,
'/': 191,
';': 186,
'[': 219,
']': 221,
'\\': 220,
"'": 222,
'ALT': 18,
'TAB': 9,
'CAPSLOCK': 20,
'ENTER': 13,
'BS': 8,
'CTRL': 17,
'ESC': 27,
' ': 32,
'END': 35,
'DOWN': 40,
'LEFT': 37,
'UP': 38,
'RIGHT': 39,
'SELECT': 41,
'PRINTSCR': 44,
'INS': 45,
'DEL': 46,
'LWIN': 91,
'RWIN': 92,
'LSHIFT': 160,
'SHIFT': 161,
'LCTRL': 162,
'RCTRL': 163,
'VOLUP': 175,
'DOLDOWN': 174,
'NUMLOCK': 144,
'SCROLL': 145 }
def KeyUp(Key):
keybd_event(Key, 0, 2, 0)
def KeyDown(Key):
keybd_event(Key, 0, 1, 0)
def Press(Key, speed=1):
rest_time = 0.05/speed
if Key in Base:
Key = Base[Key]
KeyDown(Key)
time.sleep(rest_time)
KeyUp(Key)
return True
if Key in Combs:
KeyDown(Base[Combs[Key][0]])
time.sleep(rest_time)
KeyDown(Base[Combs[Key][1]])
time.sleep(rest_time)
KeyUp(Base[Combs[Key][1]])
time.sleep(rest_time)
KeyUp(Base[Combs[Key][0]])
return True
return False
def Write(Str, speed = 1):
for s in Str:
Press(s, speed)
time.sleep((0.1 + random.random()/10.0) / float(speed))
Example:
>>> Write('Hello, World!', speed=3)
Hello, World!
>>> Press('ENTER')
If you want to implement some more keys then you can find their codes here. And just add these keys to the Base dictionary.
这篇关于在 Python 2.7 中模拟按键事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!