Уведомления

Группа в Telegram: @pythonsu

#1 Март 10, 2014 21:19:39

Goward
Зарегистрирован: 2014-03-10
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Нажатие клавиш в стороннем окне

Здравствуйте,
Следующий код реализует запуск функции при нажатии клавиши 4:

import msvcrt
while True:
    char = msvcrt.getch()
    if char == b'4':
        function()
Однако я так и не смог добиться того, чтобы это работало, когда активно стороннее окно. Например, я запускаю скрипт, открываю окно блокнота, жму клавишу 4 и выполняется function(), которая в блокноте что-нибудь пишет или нажимает. Вышеприведенный код работает только когда активно окно самого скрипта(py.exe).
Прошу помощи от более опытных кодеров
Заранее большое спасибо!

Офлайн

#2 Март 11, 2014 14:12:13

Goward
Зарегистрирован: 2014-03-10
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Нажатие клавиш в стороннем окне

Неужели никто не знает? Хотя бы догадки и предположения. Хотя бы в какую сторону думать, подскажите

Офлайн

#3 Март 11, 2014 19:06:54

Goward
Зарегистрирован: 2014-03-10
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Нажатие клавиш в стороннем окне

Сделал вот так:

import ctypes
from ctypes import wintypes
import win32con
def function():
  print("Yahoo!")
ctypes.windll.user32.RegisterHotKey (None, 1, 0, 0x72)
msg = wintypes.MSG()
while ctypes.windll.user32.GetMessageA (ctypes.byref(msg), None, 0, 0) != 0:
    if msg.message == win32con.WM_HOTKEY:
        function()
Теперь работает как нужно, однако я не понимаю 3 строчки из этого кода(нашел на просторах гугла):
.......
msg = wintypes.MSG()
while ctypes.windll.user32.GetMessageA (ctypes.byref(msg), None, 0, 0) != 0:
    if msg.message == win32con.WM_HOTKEY:
.......
Могли бы вы пояснить в подробностях, что эти три строки делают?
Спасибо!

Офлайн

#4 Март 12, 2014 07:20:34

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Нажатие клавиш в стороннем окне

Каждое приложение получает только свои нажатия на кнопки. Если вы им хотите управлять, то используйте программное API которое предусмотрено разработчиком.

Если вам лень его найти или его вообще нет можно использовать pywinauto. Это крайне костыльное решение и заниматься этим не рекомендую.

Если программа не предоставляет api для автоматизации то ее лучше и не использовать для этого.



Отредактировано doza_and (Март 12, 2014 07:21:23)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version