Запуск программ на нескольких рабочих столах с использованием powershell в Windows 10

Предположим, я хочу запустить несколько программ C:\program1.exe, C:\program2.exe и т. Д. На нескольких рабочих столах в Windows 10. Например, программы 1 и 2 должны запускаться параллельно на рабочем столе 1, программа 3 следует запустить на втором рабочем столе, а программу 4 следует запустить на третьем рабочем столе.

Это должно быть достигнуто с помощью PowerShell или пакетного сценария. Решение было бы идеальным, если сценарий powershell автоматически обнаружит, достаточно ли открыто рабочих столов, и при необходимости откроет больше рабочих столов.

Позиция batch-file-run-program-set позволяет решить проблему одновременного открытия нескольких программ и изменения их размера. Однако эти решения не предназначены для нескольких рабочих столов Windows 10. Решения основаны на Monitorinfoview и NirCmd (один и тот же веб-сайт). Инструмент Monitorinfoview не извлекает информацию о нескольких рабочих столах, а только о нескольких экранах. NirCmd также не включает команды для отправки программ на определенные рабочие столы.

1 ответ

Есть команды Powershell, которые работают с виртуальными рабочими столами. Во-первых, вам нужно будет установить модуль виртуального рабочего стола сInstall-Module VirtualDesktop

#Switch to desktop 2 (count starts with 0)
Get-Desktop 1 | Switch-Desktop

#Move obs64.exe to desktop 3
(ps obs64)[0].MainWindowHandle | Move-Window (Get-Desktop 2) | Out-Null

Возможно, вам придется подождать, пока начальный процесс инициализирует свое окно с помощью Start-Sleep

Подробнее см. Здесь: https://gallery.technet.microsoft.com/scriptcenter/Powershell-commands-to-d0e79cc5.

Это должно привести вас в правильное русло. Он использует PowerShell, C# (внутри PS), ярлыки Windows и основные команды. Сохраните это в сценарии.ps1.

$Source = @"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WindowsInput;

namespace CSharpPS
{
    public static class PS
    {
        public static void NewVD()
        {
            InputSimulator.SimulateKeyDown(VirtualKeyCode.LWIN);
            InputSimulator.SimulateKeyDown(VirtualKeyCode.CONTROL);
            InputSimulator.SimulateKeyPress(VirtualKeyCode.VK_D);
            InputSimulator.SimulateKeyUp(VirtualKeyCode.LWIN);
            InputSimulator.SimulateKeyUp(VirtualKeyCode.CONTROL);
        }        
    }
}
"@;

Add-Type -TypeDefinition $Source -Language CSharp -ReferencedAssemblies InputSimulator.dll

Вы можете получить C# InputSimulator.dll с https://inputsimulator.codeplex.com/

После того, как тип был добавлен, вы можете позвонить [CSharpPS.PS]::NewVD() создать новый виртуальный рабочий стол. Отсюда вы можете запускать определенные программы. Возможно, вам придется вручную установить режим сна. Пример:

calc Start-Sleep -Milliseconds 500

Затем откройте новый виртуальный рабочий стол [CSharpPS.PS]::NewVD() Start-Sleep -Milliseconds 500 notepad

Вы можете расширить класс C#, чтобы позволить переключаться между виртуальными рабочими столами или сворачивать приложения, как вам требуется.

Другие вопросы по тегам