Использование Powershell и Windows-форм.Есть ли способ получить ключ ввода без текстового поля - PullRequest
1 голос
/ 28 сентября 2019

Я использую формы Powershell и Windows.Есть ли способ получить ключ ввода без текстового поля?

Для текстового поля я знаю, что вы могли бы сделать следующее.

$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") 
    {$newid=$objTextBox.Text;$objForm.Close()}})  #VARIABLE CAPTURE
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") 

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

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

В этом случае я бы определил область действия получающей переменнойвход должен иметь как минимум область действия script, например: $script:FormResult

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

$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Select option"
$objForm.Size = New-Object System.Drawing.Size(300,200)
$objForm.StartPosition = "CenterScreen"
# with this, the form will receive key events before the event is passed to the control that has focus.
$objForm.KeyPreview = $true

$Label = New-Object System.Windows.Forms.Label
$Label.Location = New-Object System.Drawing.Size(10,20) 
$Label.AutoSize = $true
$label.Text = @"
Select an action to perform.

1. Perform action 1
2. Perform action 2
3. Perform action 3

Press Escape to cancel
Press Enter to perform all actions
"@

$objForm.Controls.Add($Label)

$objForm.Add_KeyDown({
    $script:FormResult = $null
    switch ($_.KeyCode) {
        {'Enter','Return' -contains $_} { $script:FormResult = 'AllActions' ; break }
        {'D1', 'NumPad1' -contains $_}  { $script:FormResult = 'Action1'; break }
        {'D2', 'NumPad2' -contains $_}  { $script:FormResult = 'Action2'; break }
        {'D3', 'NumPad3' -contains $_}  { $script:FormResult = 'Action3'; break }
        'Escape'                        { $script:FormResult = 'Cancel' }
    }
    if ($script:FormResult) { $objForm.Close() }
})

[void] $objForm.ShowDialog()

# clean up the form from memory when done
$objForm.Dispose()

После этого вы можете проверить все, что выбрал пользователь, используя переменную $script:FormResult

Надеюсь, что это поможет

0 голосов
/ 28 сентября 2019

Powershell предоставляет Read-Host, который будет читать из подсказки powershell.

$newid = Read-Host

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