【问题标题】:Starting programs on multiple desktops using powershell in windows 10在 Windows 10 中使用 powershell 在多个桌面上启动程序
【发布时间】:2015-09-10 01:59:03
【问题描述】:

假设我想在 windows 10 的多个桌面上启动几个程序 C:\program1.exe、C:\program2.exe 等。例如,程序 1 和 2 应该在桌面 1 上并排启动-另一方面,程序 3 应该在第二个桌面启动,而程序 4 应该在第三个桌面最小化启动。

这应该使用 powershell 或批处理脚本来实现。如果powershell脚本自动检测是否有足够多的桌面打开并在必要时打开更多桌面,则该解决方案将是完美的。

batch-file-run-program-set position 提供了一个解决同时打开多个程序并调整它们大小的问题。但是,这些解决方案不能解决多个 Windows 10 桌面。解决方案依赖于Monitorinfoview 和 NirCmd(同一网站)。工具 Monitorinfoview 不会检索多个桌面信息,而只会检索多个屏幕。 NirCmd 也不包含将程序发送到特定桌面的命令。

【问题讨论】:

  • 您对此进行过研究吗?这是一个社区,我们不为他人建造东西,我们分享经验来帮助你,如果你在做你开始的事情时遇到困难。
  • 是的,我尝试了以下解决方案:link 但是,我找不到 powershell 如何针对特定桌面。
  • 然后包括您在执行此操作时收到的内容、错误、痕迹、详细信息..
  • @HREcon 现在还没有足够的关于如何以编程方式使用虚拟桌面的信息。有一些vague interface documentation,但它甚至没有说这是COM,还是其他东西,或者如何实例化它。甚至没有关于 win32 的示例,更不用说托管代码,所以目前似乎没有任何关于它的信息。但除此之外,柴比阿拉是对的;这个问题并不适合这个网站。
  • 您目前可以使用 Windows API 将一个窗口移动到另一个桌面。但是,只有当您的进程拥有该窗口时,它才会起作用。在您的场景中,听起来您正在启动新进程,但我认为没有办法移动另一个进程拥有的窗口。

标签: windows powershell windows-10 powershell-5.0 virtual-desktop


【解决方案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

【讨论】:

    【解决方案2】:

    这应该能让你走上正确的道路。它使用 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 - 链接已失效,但回路机器应该可以帮助 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# 类以允许在虚拟桌面之间进行更改或最小化您需要的应​​用程序。

    【讨论】:

    • 我相信这是最好的答案,我相信这很荒谬。微软,拯救我们自己。允许应用设置其默认桌面会很棒。
    猜你喜欢
    • 2021-05-15
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多