2015-12-08 2 views
1

Что я хотел бы сделать, так это назначить кнопку сочетания клавиш, например $ TurnOnButton в качестве ключа «Q» и $ TurnOffButton в качестве клавиши «W» на моей клавиатуре.Назначить сочетания клавиш кнопкам в сценарии Powershell

Так что, в основном, в моем примере ниже. Когда скрипт запущен и форма присутствует, я бы мог нажать кнопку «Q» на моей клавиатуре, чтобы запустить калькулятор, и нажать кнопку «W», чтобы завершить ее.

Возможно ли это с помощью PowerShell? Пример

Код:

Add-Type -AssemblyName System.Windows.Forms 

function Return-TurnOff 
{ 
    $x = Stop-Process -ProcessName calc 
    $x 
} 

function Return-TurnOn 
{ 
    $x = Start-Process calc 
    $x 
} 

$form = New-Object System.Windows.Forms.Form 
$form.Text = "Title of the form" 
$form.Size = New-Object System.Drawing.Size(300,200) 
$form.minimumSize = New-Object System.Drawing.Size(300,200) 
$form.maximumSize = New-Object System.Drawing.Size(300,200) 
$form.StartPosition = "CenterScreen" 

$TurnOffButton = New-Object System.Windows.Forms.Button 
$TurnOffButton.Location = New-Object System.Drawing.Point(10,125) 
$TurnOffButton.Size = New-Object System.Drawing.Size(55,25) 
$TurnOffButton.Text = "Turn Off" 
$TurnOffButton.Add_Click({Return-TurnOff}) 
$form.AcceptButton = $TurnOffButton 
$form.Controls.Add($TurnOffButton) 

$TurnOnButton = New-Object System.Windows.Forms.Button 
$TurnOnButton.Location = New-Object System.Drawing.Point(10,65) 
$TurnOnButton.Size = New-Object System.Drawing.Size(55,25) 
$TurnOnButton.Text = "Turn On" 
$TurnOnButton.Add_Click({Return-TurnOn}) 
$form.AcceptButton = $TurnOnButton 
$form.Controls.Add($TurnOnButton) 

$CancelButton = New-Object System.Windows.Forms.Button 
$CancelButton.Location = New-Object System.Drawing.Point(215,125) 
$CancelButton.Size = New-Object System.Drawing.Size(55,25) 
$CancelButton.Text = "Cancel" 
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel 
$form.CancelButton = $CancelButton 
$form.Controls.Add($CancelButton) 

$label = New-Object System.Windows.Forms.Label 
$label.Location = New-Object System.Drawing.Point(10,15) 
$label.Size = New-Object System.Drawing.Size(280,20) 
$label.Text = "Label for textbox:" 
$form.Controls.Add($label) 

$textBox = New-Object System.Windows.Forms.TextBox 
$textBox.Location = New-Object System.Drawing.Point(10,35) 
$textBox.Size = New-Object System.Drawing.Size(260,20) 
$form.Controls.Add($textBox) 

$form.Topmost = $True 

$form.Add_Shown({$textBox.Select()}) 
$result = $form.ShowDialog() 

ответ

2

Если вы не против того, чтобы метка на кнопке содержит букву, соответствующую кнопку и нажав клавишу Alt, то это очень легко, просто положить "& 'перед буквой в тексте кнопки вы хотите быть ускоритель:

$TurnOnButton.Text = "Turn O&n" 
$TurnOffButton.Text = "Turn O&ff" 

сделать бы Alt-N выполнить Включение и Alt-F выполнить Выключить.

Более сложное решение - зарегистрироваться для нажатия клавиш, но это позволит вам обрабатывать любое нажатие клавиши, будет ли нажата клавиша Alt. $form|gm -MemberType event key* покажет вам события, чье имя начинается с «Key». Затем вы можете использовать Google для обработки событий из Powershell с помощью WinForms.

+0

Thanks user2460798! Я, честно говоря, даже не думал добавить Alt-ярлык к кнопкам. Я изучу этот вариант позже, потому что это больше того, что я ищу, но сейчас я буду придерживаться вашего Alt-решения. Большое спасибо. :) – luoxiansheng