重新启用导入模块 Psreadline 警告

问题描述 投票:0回答:2

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'.

即使我通过注册表将值更改为

0
,警告仍然显示。

powershell visual-studio-code warnings screen-readers
2个回答
29
投票

您的症状的含义是:

    PowerShell 会话启动时,
  • Windows 处于屏幕阅读器模式(针对视障人士的 Windows 辅助功能)。

  • 您正在使用常规 PowerShell 会话,无论是在控制台窗口/Windows 终端还是在 Visual Studio Code 的集成终端中。

    • 相比之下,如果您将 Visual Studio Code PowerShell 扩展一起使用,可以提供更丰富的 PowerShell 代码编写体验,则不会出现该问题,因为扩展在所谓的PowerShell Integrated Console do not 执行此检查(从版本

      2021.2.2
      开始),因此 do 加载
      PSReadLine
      (提供丰富命令行编辑体验的模块)并且不发出一个警告。目前尚不清楚这种无条件覆盖是有意为之还是疏忽。

    • 虽然您可以按照错误消息中的建议并添加

      Import-Module PSReadLine
      到您的
      $PROFILE
      文件,这样做将重新启用 PSReadLine 以获得丰富的命令行编辑体验,但是 您仍然会在启动时看到警告,因为它是由 PowerShell before 发出的
       $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 中意外打开,且应用程序行为不当,无法再次关闭该模式,或者在执行此操作之前已崩溃,您可以临时关闭该模式,以便同一操作系统用户会话中的未来PowerShell会话不再看到警告

以下内容改编自此 GitHub 评论,是一个 PowerShell 命令,它通过

Add-Type
和临时编译的 C# 代码(执行 P/Invoke 调用所必需的)来执行此操作:

# Run in 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)

3
投票

你也可以试试这个(刚刚为我醒来)

第1步:打开“运行”(WIN + R)

第 2 步:输入“regedit

第三步:左侧有一个文件夹,名为“HKEY_CURRENT_USER”;点击它。

第 4 步:单击名为 “控制面板” 的子文件夹,然后单击名为 “盲访问” 的子文件夹或按照此路径 Computer\HKEY_CURRENT_USER\Control Panel\Accessibility\Blind Access

第5步:右键单击选项“打开”,选择选项“修改”,然后将值设置为0。

现在重新启动您的计算机,问题就解决了!

© www.soinside.com 2019 - 2024. All rights reserved.