Python активирует Windows с тем же именем

#python #window #hwnd

#python #окно #hwnd

Вопрос:

Итак, что мне нужно сделать, это периодически менять активное окно, моя проблема в том, что все они имеют одинаковое имя, и использование их HWND работает только для первого окна. Кроме того, я бы хотел, чтобы мне не приходилось каждый раз вставлять его HWND

 import win32gui, time

def main():
    while(1):
        win32gui.SetForegroundWindow(788574)#win2
        side()
        time.sleep(5)

def side():
    while(1):
        win32gui.SetForegroundWindow(3147934)#win1
        main()
        time.sleep(5)

if __name__ == '__main__':
    main()
  

Комментарии:

1. Когда вы говорите то же имя, вы имеете в виду тот же текст в строке заголовка?

2. Точно, они оба имеют одинаковый текст, я пробовал использовать их HWND, но все равно не будет работать

Ответ №1:

Чтобы переключиться между выбранными окнами, выполните несколько шагов:

  • Используйте win32gui.Перечислять окна для просмотра всех открытых окон
  • Используйте win32gui.GetWindowText для получения текста строки заголовка из окна
  • Используйте win32com.client.Отправка и клавиши отправки для активации процесса переключения
  • Используйте win32gui.SetForegroundWindow для выбора окна для активации

Вот код:

 import win32com.client as win32
import win32gui
import time

title = "Untitled - Notepad2"  # cycle all windows with this title

def windowEnumerationHandler(hwnd, top_windows):
    top_windows.append((hwnd, win32gui.GetWindowText(hwnd)))
    
top_windows = []  # all open windows
win32gui.EnumWindows(windowEnumerationHandler, top_windows)

winlst = []  # windows to cycle through
for i in top_windows:  # all open windows
   if i[1] == title:
      winlst.append(i)
      
for x in range(5):  # cycle 5 times
   for w in winlst:  # each window with selected title
       shell = win32.Dispatch("WScript.Shell")  # set focus on desktop
       shell.SendKeys('%')  # Alt key
       win32gui.SetForegroundWindow(w[0]) # bring to front, activate
       time.sleep(2)  # 2 seconds
  

Комментарии:

1. Эй, большое тебе спасибо. Используя код, который вы привели в качестве примера, я смог это сделать, спасибо за вашу помощь!