2016-10-26 5 views
0

Я использую Python для отправки команд клавиатуры другим программам. У меня есть рабочее решение, но я хочу улучшить его.Фокусное дочернее окно в Python win32gui

Другие программы - отчеты Genesys CCPulse, и я имею четыре разных экземпляра, работающих одновременно. У каждого экземпляра есть собственное главное окно, а затем количество дочерних окон внутри (до 30).

Благодаря этому сообщению Python Window Activation Мне удалось переключиться между главными окнами и получить тот, который мне нужен на переднем плане. В настоящее время я использую команды клавиатуры для отправки ярлыков меню, чтобы сменить фокус на дочерние окна и сохранить их.

Я бы хотел избежать навигации по меню и просто активировать каждое дочернее окно, а затем отправить команды для их сохранения. Другое сообщение EnumChildWindows not working in pywin32 достало мне список ручек для дочерних окон.

В идеале я хотел бы продолжать использовать win32gui, если возможно, так как остальная часть кода работает.

Текущий код

import win32gui 
import re 

class WindowMgr: 
    #set the wildcard string you will search for 
    def find_window_wildcard(self, wildcard): 
     self._handle = None 
     win32gui.EnumWindows(self.window_enum_callback, wildcard) 

    #enumurate through all the windows until you find the one you need 
    def window_enum_callback(self, hwnd, wildcard): 
     if re.match(wildcard, str(win32gui.GetWindowText(hwnd))) != None: 
      self._handle = hwnd ##pass back the id of the window 

    #as a separate function, set the window to the foreground  
    def set_foreground(self): 
     win32gui.SetForegroundWindow(self._handle) 

    #extra function to get all child window handles 
    def get_child_handles(self): 
     win32gui.EnumChildWindows(self._handle, add_to_list, None) 

    #final function to send the commands in 
    def flash_window(self): 
     for c_hwnd in child_list: 
      print((self._handle),(c_hwnd),(win32gui.GetWindowText(c_hwnd))) #prove correct child window found 
      #send command1# 
      #send command2# 
      #send command3# 

#seprate fundction to collect the list of child handles 
def add_to_list(hwnd, param): 
    if win32gui.GetWindowText(hwnd)[:3] == "IWD": 
     child_list.append(hwnd) 

child_list=[] 
w = WindowMgr() 

w.find_window_wildcard(".*Sales*") 
w.set_foreground() 
w.get_child_handles() 
w.flash_window() 
+0

этот вопрос все еще активен? –

+0

Да, все еще ищу ответ, пожалуйста – CJC

ответ

1

Просто найти ответ на этот

def flash_window(self): 
    for c_hwnd in child_list: 
     win32gui.BringWindowToTop(c_hwnd) 

Это BringWindowToTop команда, которая будет активировать каждое дочернее окно, в свою очередь. Затем я могу выполнить любые команды, которые я хочу для каждого окна.