2016-06-30 6 views
1

Ich habe ein bisschen einen Haken für ein Formular, an dem ich arbeite. Ich habe eine Schaltfläche, die den Benutzer mit Ja/Nein-Feldern auffordert, und ich möchte Funktionalität hinzufügen, die es ihnen ermöglicht, die Eingabeaufforderung zu umgehen, wenn Sie die Umschalttaste gedrückt halten, wenn Sie auf die Schaltfläche klicken. Hier ist, was ich in dem Click-Ereignis versucht haben scriptblock so weit, aber nichts scheint zu funktionieren:KeyDown mit Click-Ereignis

if($_.KeyCode -eq 'Shift'){ 
     #Stuff 
    } 

    if($_.Shift){ 
     #Stuff 
    } 

Alle Ideen, was ich tun kann, diese Funktion zu erhalten?

Antwort

2

Das Klickereignis hat keinen Schlüsselcode. Folgendes funktioniert in PowerShell v2 - in späteren Versionen gibt es möglicherweise einfachere Möglichkeiten.

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() 
+0

Gibt es bessere Lösungen für PS v3? – nkasco