Найти - Пользователи
Полная версия: Запуск двух разных приложений на пк к которому подключены два монитора
Начало » Python для экспертов » Запуск двух разных приложений на пк к которому подключены два монитора
1
usmesn
Приветствую всех господа программисты!!!!

Возникла такая задача, запустить скриптом два батника А.bat и В.bat(один на одном, второй на втором мониторе), которые в сою очередь стартуют соответствующие ярлыки указанных приложений . Ярлыки используются потому, что в свойствах ярлыка можно указать раскрыть приложение во весь экран(принципиально важно). Что сделано:

Python
Выделить код
 import screeninfo
import subprocess
import argparse
import sys
import os
 
 
def return_list_monitor():
    monitors = []
    for monitor in screeninfo.get_monitors():
        monitors.append(monitor.name)
    return monitors
 
if __name__ == "__main__":
    mon = return_list_monitor()
    app1 = r'C:\Users\username\Desktop\app1.bat'
    app2 = r'C:\Users\username\Desktop\app2.bat'
А что дальше делать - непонятно. Имена мониторов получаю, к примеру \.\DISPLAY1 и \.\DISPLAY2. Как заставить запустить один батник в одном месте, другой в другом - не ясно. Например функция Popen имеет параметр stdout - как его переопределить на конкретный моник - не понимаю(вероятно это невозможно), есть параметр preexec_fn=None - пользовательская функция, выполняемая до запуска программы, так же не ясно как направить поток выводы на моник. Может вообще это кто делал не средствами питона?
Буду рад любой помощи.
mixer
Может запустить батник, подождать секунду.
Получить хэндл окна через GetForegroundWindow и переместить с помощью SetWindowPos на нужный монитор?
Координаты в переменной monitor вроде есть
xam1816
mixer
Зарегистрирован: 2010-09-29
2 сообщения за 12 лет?
Почему именно сейчас стало актуально что-то здесь ответить?
mixer
У меня работает, как раз два моника стоит. Нехорошо конечно то что мы ждем секунду открытия окна и берем хендл верхнего. Но для какого-нибудь стартера программ наверное пойдет. Главное в процессе запуска мышкой по окнам не тыкать :)
 import time
import screeninfo
import os
# Python 3.6
import win32con
from win32gui import GetForegroundWindow, MoveWindow, ShowWindow
class RunApp:
    def __init__(self):
        self.monitors = [_ for _ in screeninfo.get_monitors()]
    def run(self, file_name, monitor_number):
        os.startfile(file_name)
        time.sleep(1)
        handle = GetForegroundWindow()
        monitor_number = monitor_number if monitor_number < len(self.monitors) else 0
        MoveWindow(handle, self.monitors[monitor_number].x, self.monitors[monitor_number].y,
                   self.monitors[monitor_number].width, self.monitors[monitor_number].height, win32con.SWP_SHOWWINDOW)
        ShowWindow(handle, win32con.SW_MAXIMIZE)
if __name__ == "__main__":
    ra = RunApp()
    ra.run(r'C:\2Work\q1.cmd', 0)
    ra.run(r'C:\2Work\q1.cmd', 1)
mixer
xam1816
2 сообщения за 12 лет?
Почему именно сейчас стало актуально что-то здесь ответить?
Сам немого удивлен. Пытался зарегаться а мыло уже в базе. :)
Давно когда то тыкался в Питон.
А тут ребенок сел за Питон, ну и я заодно учу для души.
Ну и полезно, небольшие задачки чужие для своего развития решать или обдумывать.
usmesn
mixer, спасибо за помощь, протестирую сообщу, на первый взгляд не плохо звучит. Не ждал уже никаких коментриев.

usmesn

mixer
спасибо тебе, все получилось.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB