É possível abrir e alinhar 4 janelas em um monitor usando um script de lote / powershell?

0

No windows10, posso abrir e alinhar manualmente até 4 janelas em uma única área de trabalho virtual:

Eu costumo fazer isso com muita frequência, eu até tenho duas camadas disso em uma tela, uma camada com pastas e outra com consoles de powershell apontando para o mesmo local do disco.

O problema é que sempre que o windows10 tem um dos seus ajustes e quer reiniciar, tenho que reabrir cerca de uma dúzia de pastas & consoles para continuar o trabalho. Enquanto isso é rotina e dificilmente leva mais do que alguns minutos, ainda leva mais do que alguns minutos e é uma tarefa terrível que eu sinto que deveria ser automatizada.

Q : Existe uma maneira de automatizar essa abertura & alinhando o Windows com um script em lote ou PowerShell?

    
por dot_Sp0T 10.12.2017 / 10:02

1 resposta

0

Existem várias soluções para isso, mas esse código ajuda a tornar isso possível sem terceiros ferramentas de festa. Infelizmente, não podemos usar SendKeys porque o A chave Win está indisponível.

Isso é um pouco hacky. O ideal seria que você desejasse consultar a resolução do monitor de destino e iniciar cada processo com a posição de pixel desejada.

# stuff needed to send keystrokes
$source = @"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace KeyboardSend
{
    public class KeyboardSend
    {
        [DllImport("user32.dll")]
        public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
        private const int KEYEVENTF_EXTENDEDKEY = 1;
        private const int KEYEVENTF_KEYUP = 2;
        public static void KeyDown(Keys vKey)
        {
            keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY, 0);
        }
        public static void KeyUp(Keys vKey)
        {
            keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
        }
    }
}
"@

Add-Type -TypeDefinition $source -ReferencedAssemblies "System.Windows.Forms"

# the arrow key combinations (0 = Left Up, 1 = Left Down, 2 = Right Up, 3 = Right Down)
$LR = @('Left','Left','Right','Right')
$UD = @('Up','Down','Up','Down')

# edit the sleep value as needed.
$sleepMS = 200

# start a process, move it in the next desirable position, x4
0..3 | % {

    Start-Process powershell
    # if we don't wait for the process to open, we might not have focus.
    Sleep -Milliseconds $sleepMS
    [KeyboardSend.KeyboardSend]::KeyDown("LWin")
    [KeyboardSend.KeyboardSend]::KeyDown($LR[$_])
    Sleep -Milliseconds $sleepMS
    [KeyboardSend.KeyboardSend]::KeyDown($UD[$_])
    [KeyboardSend.KeyboardSend]::KeyUp("LWin")
    Sleep -Milliseconds $sleepMS
    [KeyboardSend.KeyboardSend]::KeyDown("Escape")

}

Lista de chaves disponíveis .

    
por 11.12.2017 / 22:37