2016-06-30 8 views
1

私が取り組んでいるフォームのために少しぶつかりました。ユーザーにyes/noボックスを要求するボタンがあり、ボタンをクリックしたときにシフトキーを押したままにすると、プロンプトをバイパスできる機能を追加したいと考えています。ここで私はこれまでのClickイベントscriptblock内試してみましたが、何も動いていないようで何:ClickDownイベントのKeyDown

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

    if($_.Shift){ 
     #Stuff 
    } 

私はこの作業を取得するために何ができるか任意のアイデア?

答えて

2

clickイベントにキーコードがありません。 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() 
+0

PS v3の方が優れていますか? – nkasco

関連する問題