在PowerShell ISE中读取Ctrl + q

时间:2014-09-18 03:13:36

标签: powershell

我正在编写一个脚本,要求用户提供输入或按Ctrl + Q退出菜单。 如何读取用户按下的键?

我找到了一个方法[Console] :: ReadKey()方法,但这对ISE不起作用,它仅适用于控制台。

1 个答案:

答案 0 :(得分: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"