【问题标题】:Re enable Import Module Psreadline warning重新启用导入模块 Psreadline 警告
【发布时间】:2021-03-22 14:53:40
【问题描述】:

此警告在 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,警告仍然显示。

【问题讨论】:

  • 您是否在将注册表值设置为 0 后重新启动?

标签: powershell visual-studio-code warnings screen-readers


【解决方案1】:

您的症状的含义是:

  • 在您的 PowerShell 会话开始时,Windows 处于屏幕阅读器模式(视障人士的 Windows 辅助功能)。

  • 您在控制台窗口/Windows 终端或 Visual Studio Code 的集成终端中使用常规PowerShell 会话

    • 相比之下,如果您将 Visual Studio Code PowerShell extension 结合使用,这会带来更丰富的 PowerShell 代码创作体验,则不会出现问题,因为扩展提供的会话在所谓的PowerShell Integrated Console do not 中执行此检查(截至版本 2021.2.2),因此 do 加载 PSReadLine(提供丰富命令的模块-line 编辑经验)并且不发出警告。目前尚不清楚这种无条件覆盖是有意设计还是疏忽。

    • 虽然您可以遵循错误消息中的建议并将
      Import-Module PSReadLine 添加到您的$PROFILE 文件中,但这样做将重新启用 PSReadLine 以获得丰富的命令行编辑体验,但您仍然会在启动时看到警告,因为它是由 PowerShell$PROFILE 文件加载之前发出的。也就是说,如果您的系统设计启用了屏幕阅读器模式,那么这就是正确的解决方案。


如果此模式(不小心)持续打开,您可以通过注册表将其关闭,如下所示:

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

如果此模式被意外打开in-OS-session,则应用程序要么行为不端,要么不返回该模式再次关闭或在能够这样做之前崩溃,您可以临时编译 C# 代码以关闭该模式(感谢改编自 this GitHub comment),以便 未来 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)

【讨论】:

  • 注册表技巧对我有用。
猜你喜欢
  • 1970-01-01
  • 2011-02-12
  • 2012-10-26
  • 2011-08-17
  • 1970-01-01
  • 2019-10-22
  • 2018-04-11
  • 1970-01-01
  • 2020-03-24
相关资源
最近更新 更多