Архив за месяц: Июнь 2015

Симуляция нажатия клавиш клавиатуры на python

В данной статье рассмотрено три задачи, которые требуются чтобы управлять компьютером на windows с помощью скрипта python. В первую очередь будет показано как выбрать необходимое окно по названию, потом как симулировать ввод текста, нажатие на клавиши, и других операций (например выделение текста ctrl+a). А также будет показано как передвинуть курсор мыши в определенную точку xy и сделать клик.

Программа ниже написана на python 3.4 и по моему замыслу должна ускорить выполнение типичной операции в одной из наших программ на работе. В комментариях подробно описано симулирование клавиш и клика

# импортируем модули для работы с windows оберткой
import win32api, win32con, win32gui
import time, win32com.client

#функция клика в определенном месте
def click(x,y):
    # сначала выставляем позицию
    win32api.SetCursorPos((x,y))
    time.sleep(0.2)
    # а потом кликаем (небольшая задержка для большей человечности)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    time.sleep(0.3)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

# данная функция - фильтр по выбору нужного окна (по названию этого окна)
def openItNow(hwnd, windowText):
    if windowText in win32gui.GetWindowText(hwnd):
        win32gui.SetForegroundWindow(hwnd)

# приступим
time.sleep(3)

# выбираем среди открытых окон то, которое содержит название Notepad
# заметьте что используется фильтр, описанный выше
win32gui.EnumWindows(openItNow, 'Notepad')

# нажимать на клавиши будет с помощью shell
shell = win32com.client.Dispatch("WScript.Shell")

# метод SendKeys программно нажимает на клавиши, поэтому далее записана последовательность нажатий
shell.SendKeys("%")
for i in range(0,4,1):
    shell.SendKeys("{RIGHT}")
    time.sleep(0.1)

shell.SendKeys("{DOWN}")
shell.SendKeys("{DOWN}")
shell.SendKeys("{DOWN}")
time.sleep(0.1)


shell.SendKeys("~")
time.sleep(7)

for i in range(0,20,1):
    shell.SendKeys("{PGUP}")
for i in range(0,11,1):
    shell.SendKeys("{DOWN}")

#здесь выполняем комбинацию клавиш Alt + 9
shell.SendKeys("%9")

# а теперь пара кликов
click(300, 700)
click(300, 600)

shell.SendKeys('вводим текст')
time.sleep(3)
# и опять комбинация
shell.SendKeys("^+{F1}")

Чтобы знать как симулировать нажатие разных клавиш (keypress), нам понадобится таблица с расшифровкой текст — клавиша.

Клавиша Аргумент
BACKSPACE {BACKSPACE}, {BS}, or {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or DELETE {DELETE} or {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER} or ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or INSERT {INSERT} or {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}
SHIFT +
CTRL ^
ALT %
ENTER ~

Написав несколько таких скриптов (выполняющих определенную последовательность нажатий на клавиатуре) вы сможете существенно ускорить выполнение своих ежедневных операций!