Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC-如何检测用户是否正在使用屏幕阅读器_C#_Asp.net Mvc_Accessibility_Screen Readers_Jaws Screen Reader - Fatal编程技术网

C# ASP.NET MVC-如何检测用户是否正在使用屏幕阅读器

C# ASP.NET MVC-如何检测用户是否正在使用屏幕阅读器,c#,asp.net-mvc,accessibility,screen-readers,jaws-screen-reader,C#,Asp.net Mvc,Accessibility,Screen Readers,Jaws Screen Reader,因此,我目前正在尝试检查用户是否正在使用我们网站上的屏幕阅读器。我想检查他们是否是因为我们的网站提供了一个培训模块,如果他们使用屏幕阅读器,我想显示一个按钮,允许他们下载可打印的培训版本 以下是我迄今为止所尝试的: internal class UnsafeNativeMethods { public const uint SPI_GETSCREENREADER = 0x0046; [DllImport("user32.dll", SetLastErro

因此,我目前正在尝试检查用户是否正在使用我们网站上的屏幕阅读器。我想检查他们是否是因为我们的网站提供了一个培训模块,如果他们使用屏幕阅读器,我想显示一个按钮,允许他们下载可打印的培训版本

以下是我迄今为止所尝试的:

internal class UnsafeNativeMethods
    {
        public const uint SPI_GETSCREENREADER = 0x0046;

        [DllImport("user32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref bool pvParam, uint fWinIni);
    }

    public static class ScreenReader
    {
        public static bool IsRunning
        {
            get
            {
                bool returnValue = false;
                if (!UnsafeNativeMethods.SystemParametersInfo(UnsafeNativeMethods.SPI_GETSCREENREADER, 0, ref returnValue, 0))
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error(), "error calling SystemParametersInfo");
                }
                return returnValue;
            }
        }
    }
我从以下StackOverflow线程捕获了此代码:


我使用的方法显然对一些人有效,正如你在这个线程中看到的,但我当前在调用ScreenReader.IsRunning时总是得到“false”。我将ScreenReader.IsRunning值存储在一个ViewBag中,然后在我的视图中使用razor语法显示一个按钮,如果该值为真。不太清楚为什么它总是假的。我已经用JAWS和“讲述者”测试过了,如果你使用的是Windows10,我想每个人的电脑上都会有“讲述者”。任何帮助都将不胜感激。谢谢大家!

无法检测用户是否正在运行屏幕阅读器。如果可能的话,它将为不道德的类型打开一扇大门,让他们了解残疾人,或者提供完全不同的“无障碍”浏览器体验,而不是构建设计包容的界面


您可以创建一个放置在屏幕外但仍处于选项卡顺序的按钮,并使其在接收焦点时可见。然后盲人用户可以找到它,而有视力的键盘用户在按钮接收到焦点时不会认为发生了什么奇怪的事情。

我想你只能检查用户是否有chrome扩展或类似的东西,在客户端使用javascript

想法
您可以为check users系统创建一个
exe
bath
文件,并将相关信息发送到服务器。如果用户下载此文件,并且没有屏幕阅读器,则加载页面。否则给出屏幕阅读器的错误信息。当用户计算机发出响应时,您可以使用
signar
向用户显示内容。您可以使此文件成为用户系统中必须使用的文件,并在用户加载页面时开始下载此文件。这不是一个好方法,但也许你可以用这种方法来检查

HttpRequest.Browser属性返回一个HttpBrowserCapabilities对象,该对象登记发出请求的设备的功能。请记住,ASP.NET使用作为HTTP请求的一部分发送的用户代理字符串来标识客户端。然后,为了填充HttpBrowserCapabilities属性,ASP.NET使用一组预安装的浏览器文件处理用户代理字符串,这些文件包含在以下位置:%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\CONFIG\Browsers


还有一些第三方的检测设备信息更为详细和更新,也就是说,

我没有为您提供解决方案,但我会告诉您为什么这不能像您所期望的那样工作。您正在检查运行应用程序的服务器是否正在运行屏幕阅读器。这并没有告诉你关于客户的任何事情。这是服务器端代码,您正在执行服务器端检查。为什么不简单地向所有人显示下载按钮?非视障用户可能也会觉得它很有用。嘿@Dan Wilson,这是客户的要求,因为客户希望尽可能多的人通过网络参加培训,并且担心如果我们向每个人提供此选项,人们会下载PDF并参加考试,而不是使用网络。@andrewmacpherson我完全同意,根据我的研究,这是一个愚蠢的差事,试图让这项工作。我想我可以做的只是提供一个“隐藏”链接,它不会被屏幕阅读器看到,而是被屏幕阅读器阅读,这样人们就可以在需要该功能时以这种方式下载培训。但他们并没有真正从培训中赚钱。这更像是法规遵从性要求,通过web接受培训,我们的应用程序可以在培训结束时对他们的培训绩效进行评分,而不是手动对PDF版本进行评分。时间是money@Chet_Steadman小心使用视觉上隐藏的链接,它们对于使用键盘的视力正常的人来说是一个大问题。他们必须满足WCAG的要求。否则,键盘用户可能会意外聚焦并激活他们无法读取的链接,