Установите консоль Top-Most в PowerShell - PullRequest
1 голос
/ 24 октября 2019

Так что, хотя есть много советов о том, как установить формы topmost, я не смог найти ничего, что заставило бы мою консоль работать выше всех.

Итак, мой вопрос: как сделать так, чтобы моя консоль работала лучше всего во время сценария?

1 Ответ

3 голосов
/ 24 октября 2019

Это требует некоторого взаимодействия .NET, как подробно описано в этом блоге:

Скрипты из TechEd 2012… Часть 1 (Держать окно PowerShell сверху)

I 'Мы скопировали соответствующий код ниже в случае исчезновения связанного сайта:

$signature = @'
[DllImport("user32.dll")]
public static extern bool SetWindowPos(
    IntPtr hWnd,
    IntPtr hWndInsertAfter,
    int X,
    int Y,
    int cx,
    int cy,
    uint uFlags);
'@

$type = Add-Type -MemberDefinition $signature -Name SetWindowPosition -Namespace SetWindowPos -Using System.Text -PassThru

$handle = (Get-Process -id $Global:PID).MainWindowHandle
$alwaysOnTop = New-Object -TypeName System.IntPtr -ArgumentList (-1)
$type::SetWindowPos($handle, $alwaysOnTop, 0, 0, 0, 0, 0x0003)

Редактировать:

Как описано в комментариях: Если вы из пакетного файлаPowerShell запускается в дочернем процессе и не владеет окном консоли, поэтому вам придется внести изменения:

$signature = @'
[DllImport("kernel32.dll")] public static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
public static extern bool SetWindowPos(
    IntPtr hWnd,
    IntPtr hWndInsertAfter,
    int X,
    int Y,
    int cx,
    int cy,
    uint uFlags);
'@

$type = Add-Type -MemberDefinition $signature -Name SetWindowPosition -Namespace SetWindowPos -Using System.Text -PassThru

$handle = $type::GetConsoleWindow()
$type::SetWindowPos($handle, -1, 0, 0, 0, 0, 0x0003)
...