2016-10-26 17 views
0

私はPythonを使ってキーボードコマンドを他のプログラムに送ります。私は実用的なソリューションを持っていますが、私はそれを改善しようとしています。Pythonの子ウィンドウをフォーカスするwin32gui

他のプログラムはGenesys CCPulseレポートであり、私は4つの異なるインスタンスを同時に実行しています。各インスタンスにはメインウィンドウがあり、内部には複数の子ウィンドウ(最大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コマンドの発見されました。私はその後、私が各ウィンドウに必要なコマンドを発行することができます。

関連する問題