私は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()
この質問はまだ有効ですか? –
はい、まだ答えを探してください – CJC