对于我正在处理的表单,我遇到了一些麻烦。我有一个按钮,提示用户是/否框,我想添加功能,如果他们在单击按钮时按住shift键,它们将绕过提示。这是我到目前为止在Click事件scriptblock
中尝试的内容,但似乎没有任何效果:
if($_.KeyCode -eq 'Shift'){
#Stuff
}
if($_.Shift){
#Stuff
}
我有什么想法可以让它发挥作用?
答案 0 :(得分:2)
点击事件没有键码。以下适用于PowerShell v2 - 在更高版本中可能有更简单的方法。
function Get-KeyState([uint16]$keyCode)
{
$signature = '[DllImport("user32.dll")]public static extern short GetKeyState(int nVirtKey);'
$type = Add-Type -MemberDefinition $signature -Name User32 -Namespace GetKeyState -PassThru
return [bool]($type::GetKeyState($keyCode) -band 0x80)
}
Add-Type -AssemblyName System.Windows.Forms
$Form = New-Object system.Windows.Forms.Form
$button = New-Object System.Windows.Forms.Button
$button.Text = 'hi'
$Form.Controls.Add($button)
$button.add_Click(
{
$VK_SHIFT = 0x10
$ShiftIsDown = (Get-KeyState($VK_SHIFT))
if ($ShiftIsDown){
[System.Windows.Forms.MessageBox]::Show("Hi, you clicked the button with shift." ,"My Dialog Box")
}
else{
[System.Windows.Forms.MessageBox]::Show("Hi, you clicked the button without shift." ,"My Dialog Box")
}
}
)
$Form.ShowDialog()