在Windows 10中使用PowerShell在多个桌面上启动程序

26
假设我想在Windows 10的多个桌面上启动几个程序C:\program1.exe,C:\program2.exe等。例如,程序1和2应该在第一个桌面并排启动,程序3应该在第二个桌面启动,而程序4应该在第三个桌面最小化启动。可以使用PowerShell或批处理脚本实现此目标。如果PowerShell脚本能够自动检测是否打开了足够的桌面,并在必要时打开更多桌面,则解决方案将非常完美。batch-file-run-program-set position提供了一种解决打开多个程序并将它们调整为并排的方法。但是,这些解决方案没有涉及到多个Windows 10桌面。解决方案依赖于Monitorinfoview和NirCmd(相同的网站)。Monitorinfoview工具不会检索多个桌面信息,而只会检索多个屏幕。NirCmd也不包括将程序发送到特定桌面的命令。

3
你对这个问题做过任何研究吗?我们是一个社区,我们不是为别人建造东西,我们分享经验来帮助你,如果你在做你开始的事情时遇到困难。 - Chaibi Alaa
1
是的,我尝试了以下解决方案:链接。然而,我无法找出PowerShell如何定位特定的桌面。 - HRSE
2
然后包括您在执行此操作时收到的内容,错误、跟踪、详细信息等。 - Chaibi Alaa
1
@HREcon 目前关于如何编程使用虚拟桌面的信息还不足够。有一些模糊的界面文档,但它甚至没有说明这是COM还是其他什么东西,或者如何实例化它。即使是win32也没有示例,更不用说托管代码了,因此目前似乎没有关于它的任何信息。但除此之外,Chaibi Alaa是正确的;这个问题并不适合在这个网站上讨论。 - briantist
2
您目前可以使用Windows API将窗口移动到另一个桌面。但是,只有在您的进程拥有该窗口时才能起作用。在您的情况下,似乎您正在启动新进程,我不认为有办法移动由另一个进程拥有的窗口。 - MatthewG
显示剩余2条评论
2个回答

16

有一些适用于虚拟桌面的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


8

这应该可以帮您一些忙。它使用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

您可以从https://inputsimulator.codeplex.com/获取C# InputSimulator.dll - 链接已失效,但是wayback机器应该会有帮助https://web.archive.org/web/20210501220444/https://archive.codeplex.com/?p=inputsimulator 一旦类型被添加,您就可以调用[CSharpPS.PS]::NewVD()来创建新的虚拟桌面。从这里,您可以运行特定的程序。 您可能需要手动设置一个睡眠时间。例如: calc Start-Sleep -Milliseconds 500 然后打开一个新的虚拟桌面:[CSharpPS.PS]::NewVD() Start-Sleep -Milliseconds 500 notepad 您可以扩展C#类以允许在虚拟桌面之间切换或最小化所需的应用程序。

5
我相信这是最好的答案,同时也认为这很荒谬。请拯救我们自己,微软。如果能允许应用程序设置它们的默认桌面将会很棒。 - andymule

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接