2014-09-18 2 views
0

Я пишу сценарий, который просит пользователя ввести ввод или нажать Ctrl + Q, чтобы выйти из меню. Как я могу прочитать ключ, который нажал пользователь?читать Ctrl + q в PowerShell ISE

Я нашел метод [Консоль] :: 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" 
Смежные вопросы