我正在编写一个脚本,要求用户提供输入或按Ctrl + Q退出菜单。 如何读取用户按下的键?
我找到了一个方法[Console] :: ReadKey()方法,但这对ISE不起作用,它仅适用于控制台。
答案 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"