2014-09-18 3 views
0

입력을 제공하거나 Ctrl + Q를 눌러 메뉴를 종료하도록 요청하는 스크립트를 작성하고 있습니다. 사용자가 누른 키를 읽으려면 어떻게해야합니까?PowerShell ISE에서 Ctrl + q를 읽습니다.

[Console] :: ReadKey() 메서드를 찾았지만 ISE에서 작동하지 않는다면 콘솔에서만 작동합니다.

답변

1

$host.UI.RawUI.ReadKey() 방법이 있지만 불행하게도 ISE does not implement it 또는 다른 과부하가 있습니다. ISE는 콘솔 앱이 아니므로 [Console] :: ReadKey()가 작동하지 않습니다.

이 작업을 수행하기 위해 Win32 API를 사용할 수 있습니다. PowerShell v3 이상을 가정합니다 :

Add-Type -MemberDefinition @' 
    [DllImport("User32")] 
    public static extern short GetAsyncKeyState(int vKey); 
'@ -Name NativeInterop -Namespace KbdUtil 

$VK_CONTROL = 0x11 
$Q_KEY = 0x51 

"Press Ctrl+Q to exit" 
while (([KbdUtil.NativeInterop]::GetAsyncKeyState($VK_CONTROL) -band 0x8000) -eq 0 -or 
     ([KbdUtil.NativeInterop]::GetAsyncKeyState($Q_KEY) -band 0x8000) -eq 0) 
{ 
    Start-Sleep -Milliseconds 100 
} 
"Done waiting" 
관련 문제