问题描述
此警告在 Visual Code 应用程序的终端中不断弹出
Warning: PowerShell detected that you might be using a screen reader and has
disabled PSReadLine for compatibility purposes.
If you want to re-enable it,run 'Import-Module PSReadLine'.
即使我通过 regedit 将值更改为 0
,警告仍然显示。
解决方法
您的症状的含义是:
-
在您的 PowerShell 会话开始时,Windows 处于屏幕阅读器模式(针对视障人士的 Windows 辅助功能)。
-
您正在使用 常规 PowerShell 会话,无论是在控制台窗口/Windows 终端中还是在 Visual Studio Code 的集成终端中。
- 相比之下,如果您将 Visual Studio Code 与 PowerShell extension 结合使用,从而实现更丰富的 PowerShell 代码创作体验,则不会出现问题,因为由所谓的 PowerShell Integrated Console do not 中的扩展执行此检查(从
2021.2.2
版本开始),因此 do 加载 {{3} } (该模块提供丰富的命令行编辑体验)并且不发出警告。目前尚不清楚这种无条件覆盖是设计还是疏忽。
- 相比之下,如果您将 Visual Studio Code 与 PowerShell extension 结合使用,从而实现更丰富的 PowerShell 代码创作体验,则不会出现问题,因为由所谓的 PowerShell Integrated Console do not 中的扩展执行此检查(从
如果此模式被(意外地)持续打开,通过注册表,您可以按如下方式关闭它:
Set-ItemProperty 'registry::HKEY_CURRENT_USER\Control Panel\Accessibility\Blind Access' On 0
注意:
-
此更改需要注销或重新启动才能生效。
-
要查询持久模式,请使用:
Get-ItemPropertyValue 'registry::HKEY_CURRENT_USER\Control Panel\Accessibility\Blind Access' On`
-
如果模式已设计启用,但您希望 PowerShell 仍加载
PSReadline
模块以获得丰富的命令行体验,请将Import-Module PSReadLine
放在您的$PROFILE
文件。 请注意,您仍然总是会看到警告,因为它是在$PROFILE
文件被处理之前发出的。
如果此模式意外地被在操作系统会话中打开,则是由行为不端的应用程序打开的,因为它不会将模式恢复再次关闭或在能够这样做之前已经崩溃,您可以临时编译 C# 代码以关闭该模式(感谢改编自 PSReadLine
),以便 未来 PowerShell 会话在同一个操作系统用户会话中不再看到警告:
(Add-Type -PassThru -Name ScreenReaderUtil -Namespace WinApiHelper -MemberDefinition @'
const int SPIF_SENDCHANGE = 0x0002;
const int SPI_SETSCREENREADER = 0x0047;
[DllImport("user32",SetLastError = true,CharSet = CharSet.Unicode)]
private static extern bool SystemParametersInfo(uint uiAction,uint uiParam,IntPtr pvParam,uint fWinIni);
public static void EnableScreenReader(bool enable)
{
var ok = SystemParametersInfo(SPI_SETSCREENREADER,enable ? 1u : 0u,IntPtr.Zero,SPIF_SENDCHANGE);
if (!ok)
{
throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
}
}
'@)::EnableScreenReader($false)