Escape-коды не работают внутри формы PowerShell - PullRequest
0 голосов
/ 17 марта 2020

Мне нужна помощь, пожалуйста.

Если вы запустите этот код PowerShell, вы увидите две строки, отображаемые разными цветами.

Clear-Host
$ESC = [char]27

"$ESC[38;2;102;255;255m$('Can you see this?')$ESC[0m"

Function DisplayEscapeCodes
{
    "$ESC[38;2;153;51;255m$('What about this?')$ESC[0m"
}

DisplayEscapeCodes

У меня проблема при попытке отображать цветной текст с помощью управляющих кодов внутри формы PowerShell. Если вы запустите приведенный ниже код, будет отображаться только текст «Вы видите это?»

Clear-Host
$ESC = [char]27

"$ESC[38;2;102;255;255m$('Can you see this?')$ESC[0m"

Function EndForm
{
    "$ESC[38;2;2;102;78m$('Or this?')$ESC[0m"
    $OKButton.Dispose();
    $Form.Dispose();
    $Form.Close()
}

Function DisplayEscapeCodes
{
    EndForm
    "$ESC[38;2;153;51;255m$('What about this?')$ESC[0m"
}

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$Form = New-Object System.Windows.Forms.Form
$Form.Text = "Test"
$Form.Font = New-Object System.Drawing.Font('Segoe UI Light',14,[System.Drawing.FontStyle]::Regular)
$Form.Size = New-Object System.Drawing.Size(400,400) 
$Form.MinimizeBox = $False
$Form.MaximizeBox = $False
$Form.ControlBox = $False
$Form.ShowIcon = $False
$Form.BackColor = "White"
$Form.ForeColor = "Black"
$Form.WindowState = "Normal"
$Form.FormBorderStyle = "Fixed3D"
$Form.ShowInTaskbar = $False
$Form.StartPosition = "CenterScreen"
$Form.Topmost = $True

$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(150,200)
$OKButton.Size = New-Object System.Drawing.Size(80,40)
$OKButton.Text = "OK"
$OKButton.Add_Click({Write-Host (DisplayEscapeCodes)})

$Form.Controls.Add($OKButton)
$Form.ShowDialog() | Out-Null

Это ошибка или я что-то не так делаю? Мне нужно использовать escape-коды, потому что они предоставляют гораздо больше, чем стандартные 16 цветов PowerShell.

Заранее спасибо за вашу помощь.

Благодаря Мартину, я смог получить "Как насчет это?" текст, чтобы появиться, внеся изменения, которые он предложил. Как я уже упоминал, я упростил код, чтобы было легче следовать. Если я изменю функцию DisplayEscapeCodes, как показано ниже, она не совсем работает, как я надеялся.

Function DisplayEscapeCodes
{
    EndForm
    "$ESC[38;2;153;51;255m$('What about this?')$ESC[0m"
    "$ESC[38;2;204;0;204m$('And this?')$ESC[0m"
}

Оба текстовых блока появляются, но на одной строке и в одном цвете. Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...