2012-12-28 22 views
8

Co chcę zrobić, to nacisnąć dowolny klawisz klawiatury z poziomu skryptu Python w systemie Windows. Próbowałem SendKeys, ale działa tylko na Pythonie 2.6. Inne metody, które próbowałem w tymSymulacja naciśnięcia klawisza w Pythonie 2.7

import win32com.client 
win32com.client.Dispatch("WScript.Shell").SendKeys('String to be typed') 

tylko pozwalają wpisywać ciągi z poziomu skryptu, ale nie pozwalają na klawisz ENTER i inne klawisze „specjalnego”.

Dlatego moje pytanie brzmi: Jak mogę symulować dowolny klawisz klawiatury naciśnij zdarzenie z poziomu skryptu Pythona tym „specjalne” tacy jak ENTER, CTRL, ESC itp

Byłoby bardzo pomocne, jeśli jest to możliwe przytrzymaj wciśnięty klawisz przez określony czas i naciśnij kombinację klawiszy, takich jak Alt + F4.

+2

Myślę, że to powinno ci pomóc! http://stackoverflow.com/questions/11906925/python-simulate-keydown – user1542671

Odpowiedz

12

Napisałem ten kod ponad 1 rok temu, więc nie jest idealne, ale to działa:

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)) 

Przykład:

>>> Write('Hello, World!', speed=3) 
Hello, World! 
>>> Press('ENTER') 

Jeśli chcą wprowadzić jeszcze kilka klawiszy następnie można znaleźć ich kody: here. I po prostu dodaj te klucze do słownika Base.

+1

+2 za fajne rozwiązanie -1 za styl kodu => +1 – palsch

+0

Pytanie: a co z klawiszami funkcyjnymi? (f1, f2, f3 ...) –

+0

Po prostu dodaj te klucze do słownika bazowego. Na przykład F1 to 0x70. Zobacz link do pozostałych kluczy w moich zaktualizowanych odpowiedziach. –

Powiązane problemy