Powershell — Привязка к окну

#powershell #winforms #sendkeys

Вопрос:

Я пытаюсь создать функцию, которая позволяет мне привязываться к определенному окну (которое уже открыто) и получать размеры окна, а также отправлять в окно щелчки мыши или нажатия клавиш. Я пытаюсь создать форму Windows, в которой я мог бы запускать другую программу «внутри». Я хочу иметь возможность изменять размер окна приложения, которое уже открыто, в саму форму, и когда что-то делается в форме, оно отправляет команды в другое окно. Например, одна сторона будет формой ввода, а другая-устаревшим настольным приложением, которое не позволяет копировать вставку. Когда в форме ввода была нажата кнопка «Отправить», были бы некоторые проверки целостности данных (для удаления любых неверных символов из формы ввода), а затем она выполняла бы отправку ключей или что-то в этом роде в окно, которое было «привязано» внутри формы.

Может ли кто-нибудь указать мне на пример такого рода процесса привязки? Я хотел бы также масштабировать форму и изменить размер другого окна на основе изменения размера родительской формы, поэтому любые примеры функций были бы чрезвычайно полезны.

Я использую найденный фрагмент кода, который позволяет мне привязывать дочернее окно и управлять им:

 function Set-WindowStyle {
    param(
        [Parameter()]
        [ValidateSet('FORCEMINIMIZE', 'HIDE', 'MAXIMIZE', 'MINIMIZE', 'RESTORE', 
                     'SHOW', 'SHOWDEFAULT', 'SHOWMAXIMIZED', 'SHOWMINIMIZED', 
                     'SHOWMINNOACTIVE', 'SHOWNA', 'SHOWNOACTIVATE', 'SHOWNORMAL')]
        $Style = 'SHOW',
        [Parameter()]
        $MainWindowHandle = (Get-Process -Id $pid).MainWindowHandle
    )
    $WindowStates = @{
        FORCEMINIMIZE   = 11; HIDE            = 0
        MAXIMIZE        = 3;  MINIMIZE        = 6
        RESTORE         = 9;  SHOW            = 5
        SHOWDEFAULT     = 10; SHOWMAXIMIZED   = 3
        SHOWMINIMIZED   = 2;  SHOWMINNOACTIVE = 7
        SHOWNA          = 8;  SHOWNOACTIVATE  = 4
        SHOWNORMAL      = 1
    }
    Write-Verbose ("Set Window Style {1} on handle {0}" -f $MainWindowHandle, $($WindowStates[$style]))

    [Win32Functions.Win32ShowWindowAsync]::ShowWindowAsync($MainWindowHandle, $WindowStates[$Style]) | Out-Null
}
 

и все это, кажется, работает, но я не могу понять, как привязать/отправить ключи/изменить размер окна. Я заглянул в модуль WASP в галерее psg, но, похоже, он больше не работает.