Перемещение окон на второй виртуальный рабочий стол в Win10

У меня есть несколько запущенных, из автозагрузки, приложений ConEmu (8 штук). Их руками переношу на второй рабочий стол, что неудобно.

Хочу автоматизировать перемещение окон на второй рабочий стол.


Ответы (1 шт):

Автор решения: gil9red

Действия:

  • Для перемещения окон использую модуль pyvda
  • Для поиска запущенных процессов ConEmu использую psutil
  • Для работы с окнами использую win32gui и pywin32. Они нужны для получения хэндлеров окон (hwnd) у процессов, чтобы по ним можно было перенести окна

Установка дополнительных модулей:

pip install pyvda
pip install psutil
pip install win32gui
pip install pywin32

Реализация:

import psutil
import pyvda
import win32gui
import win32process


NEED_WINDOW_DESKTOP_NUMBER = 2


def get_hwnd_for_pid(pid: int):
    def callback(hwnd: int, hwnds: list):
        if win32gui.IsWindowVisible(hwnd) and win32gui.IsWindowEnabled(hwnd):
            _, found_pid = win32process.GetWindowThreadProcessId(hwnd)
            if found_pid == pid:
                hwnds.append(hwnd)
                return True
        return True

    hwnds = []
    win32gui.EnumWindows(callback, hwnds)
    return hwnds[0] if hwnds else -1


for proc in psutil.process_iter():
    if not proc.is_running() or proc.name() != 'ConEmu.exe':
        continue

    hwnd = get_hwnd_for_pid(proc.pid)
    if hwnd == -1 or pyvda.GetWindowDesktopNumber(hwnd) == NEED_WINDOW_DESKTOP_NUMBER:
        continue

    print(f'Moved window (pid={proc.pid}) to window desktop #{NEED_WINDOW_DESKTOP_NUMBER}')
    pyvda.MoveWindowToDesktopNumber(hwnd, NEED_WINDOW_DESKTOP_NUMBER)
→ Ссылка