在 Python 2.7 中模拟按键事件 [英] Simulating a key press event in Python 2.7

查看:42
本文介绍了在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆