Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 24, 2014 12:05:05

Standret
Зарегистрирован: 2014-12-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Python win32api как активировать конкретное окно

Здравствуйте. Появилась потребность эмулировать нажаття клавиатуры и мышки в конкретном окне.
(Например, в браузере что открыт не на весь экран программа писала буквы, и кликает мышкой на закладки.)
И суть вопроса заключается в том как правильно прописать код, по захвату окна если браузер и программа кликер будет запускаться на виртуальной машине/планирую использовать FindWindow.

Отредактировано Standret (Дек. 25, 2014 18:08:24)

Офлайн

#2 Дек. 25, 2014 06:46:13

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

Python win32api как активировать конкретное окно

pywinauto
http://code.google.com/p/swapy/
http://python.su/forum/topic/21950/

Отредактировано Kasta_neda (Дек. 25, 2014 06:47:03)

Офлайн

#3 Дек. 25, 2014 12:58:01

Standret
Зарегистрирован: 2014-12-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Python win32api как активировать конкретное окно

Kasta_neda
pywinautohttp://code.google.com/p/swapy/http://python.su/forum/topic/21950/
Здравствуйте. Для того чтобы установить можуль pywinauto насколько я знаю нужен sendkeys а он только для python 2.7 (если есть для python 3x будьте добры поделитесь ссылкой).

Я немного почитал статей по win32api, и там было написано что для выделения окна нужно FindWindow. Но практически нигде не написано как можно узнать:

ClassName = aaa
WindowName = bbb

Ниже представлен код. Который нужно правильно правильно объединить с другим кодом:

hwnd=win32gui.FindWindow(aaa, bbb)
win32gui.SetForegroundWindow(hwnd)

import win32gui
hwnd = win32gui.GetForegroundWindow()
win32gui.MoveWindow(hwnd, 120, 120, 500, 500, True)

Должно получитса что-то такое рассмотрю на примере блокнота
Например:
1. У меня открытый блокнот (Notepad ++) (окно не активно)
2. Я запускаю код каторый должен активировать окно (Notepad ++)
3. Сделать разрешение 500х500 и поместить по центру (ну с этим я разобрался).

Основной вопрос как узнать Class Name Window Name

Прошу прощения за грамматику, и наивные вопросы, мы все когда-то через эту стадию проходили

Отредактировано Standret (Дек. 25, 2014 17:43:27)

Офлайн

#4 Дек. 25, 2014 18:36:19

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

Python win32api как активировать конкретное окно

Показывает открытые

import win32gui
def window_enum_handler(hwnd, resultList):
    if win32gui.IsWindowVisible(hwnd) and win32gui.GetWindowText(hwnd) != '':
        resultList.append((hwnd, win32gui.GetWindowText(hwnd)))
def get_app_list(handles=[]):
    mlst=[]
    win32gui.EnumWindows(window_enum_handler, handles)
    for handle in handles:
        mlst.append(handle)
    return mlst
appwindows = get_app_list()
#return appwindows
for i in appwindows:
    for y in i:
        try:
            print y.decode('cp1251')
        except: 
            print y
поиск по названию
from ctypes import windll
import win32gui
FindWindowW = windll.user32.FindWindowW
FindWindowA = windll.user32.FindWindowA
print FindWindowW(0, u"Program Manager")
print FindWindowA(0, "Program Manager")
hwn = win32gui.FindWindow(None, "Program Manager")#desktop
print hwn
нашли, делаете его активным
win32gui.SetActiveWindow 
win32gui.SetFocus
win32gui.SetForegroundWindow(w)
хотя может и по другому можно

Отредактировано Kasta_neda (Дек. 25, 2014 19:10:18)

Офлайн

#5 Дек. 25, 2014 19:19:17

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

Python win32api как активировать конкретное окно

ну или так

import win32gui
import win32con
toplist, winlist = [], []
def enum_cb(hwnd, results):
    winlist.append((hwnd, win32gui.GetWindowText(hwnd)))
win32gui.EnumWindows(enum_cb, toplist)
notepad = [(hwnd, title) for hwnd, title in winlist if 'notepad++' in title.lower()]
notepad= notepad[0]
hwnd = notepad[0]
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)#разворачивает, если свернуто окно
win32gui.SetForegroundWindow(hwnd)
bbox = win32gui.GetWindowRect(hwnd)

Отредактировано Kasta_neda (Дек. 25, 2014 19:25:54)

Офлайн

#6 Дек. 25, 2014 20:15:51

Standret
Зарегистрирован: 2014-12-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Python win32api как активировать конкретное окно

Kasta_neda
ну или так

Спасибо

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version