Запуск программ на нескольких рабочих столах с использованием 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#, чтобы позволить переключаться между виртуальными рабочими столами или сворачивать приложения, как вам требуется.