Вы говорите об активации окна, которое вы создали в wx или отдельном приложении, таком как блокнот?Если это с wx, то это тривиально.Вы просто используете Raise (), чтобы сфокусировать любой кадр.Вы, вероятно, использовали бы PubSub или PostEvent, чтобы сообщить подкадру, что он должен поднять.
Если вы говорите о блокноте, то все становится намного сложнее.Вот уродливый хак, который я создал на основе некоторых вещей, которые я получил из разных мест в Интернете и из списка рассылки PyWin32:
def windowEnumerationHandler(self, hwnd, resultList):
'''
This is a handler to be passed to win32gui.EnumWindows() to generate
a list of (window handle, window text) tuples.
'''
resultList.append((hwnd, win32gui.GetWindowText(hwnd)))
def bringToFront(self, windowText):
'''
Method to look for an open window that has a title that
matches the passed in text. If found, it will proceed to
attempt to make that window the Foreground Window.
'''
secondsPassed = 0
while secondsPassed <= 5:
# sleep one second to give the window time to appear
wx.Sleep(1)
print 'bringing to front'
topWindows = []
# pass in an empty list to be filled
# somehow this call returns the list with the same variable name
win32gui.EnumWindows(self.windowEnumerationHandler, topWindows)
print len(topWindows)
# loop through windows and find the one we want
for i in topWindows:
if windowText in i[1]:
print i[1]
win32gui.ShowWindow(i[0],5)
win32gui.SetForegroundWindow(i[0])
# loop for 5-10 seconds, then break or raise
handle = win32gui.GetForegroundWindow()
if windowText in win32gui.GetWindowText(handle):
break
else:
# increment counter and loop again
secondsPassed += 1
Затем я использовал пакет SendKeys для отправки текста в окно (см. http://www.rutherfurd.net/python/sendkeys/). Если пользователь откроет что-то еще, скрипт сломается или произойдут странные вещи. Если вы откроете что-то вроде MS Office, используйте win32com вместо SendKeys. Это гораздо надежнее.