我使用Python将键盘命令发送到其他程序。我有一个有效的解决方案,但我希望改进它。
其他程序是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 :(得分:1)
刚刚找到了答案
def flash_window(self):
for c_hwnd in child_list:
win32gui.BringWindowToTop(c_hwnd)
BringWindowToTop
命令将依次激活每个子窗口。然后我可以继续向每个窗口发出我想要的任何命令。