Найти - Пользователи
Полная версия: Python win32api как активировать конкретное окно
Начало » Python для новичков » Python win32api как активировать конкретное окно
1
Standret
Здравствуйте. Появилась потребность эмулировать нажаття клавиатуры и мышки в конкретном окне.
(Например, в браузере что открыт не на весь экран программа писала буквы, и кликает мышкой на закладки.)
И суть вопроса заключается в том как правильно прописать код, по захвату окна если браузер и программа кликер будет запускаться на виртуальной машине/планирую использовать FindWindow.
Kasta_neda
pywinauto
http://code.google.com/p/swapy/
http://python.su/forum/topic/21950/
Standret
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

Прошу прощения за грамматику, и наивные вопросы, мы все когда-то через эту стадию проходили
Kasta_neda
Показывает открытые
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
ну или так
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)
Standret
Kasta_neda
ну или так

Спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB