ASP.NET MVC - Как определить, использует ли пользователь программу чтения с экрана - PullRequest
0 голосов
/ 19 сентября 2018

Поэтому я сейчас пытаюсь проверить, использует ли пользователь программу чтения с экрана на нашем сайте.Причина, по которой я хотел бы проверить, есть ли они, заключается в том, что наш сайт предоставляет учебный модуль, в котором, если они используют программу чтения с экрана, я хотел бы показать кнопку, которая позволила бы им загрузить печатную версию обучения.

Вот что я пробовал до сих пор:

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: C #: Как определить, работает ли программа чтения с экрана?

Метод, который я использую, по-видимому, работает для некоторых, как вы можете видеть в этой теме, но в настоящее время я всегда получаю «false» при вызове ScreenReader.IsRunning.Я сохраняю значение ScreenReader.IsRunning в ViewBag, а затем, на мой взгляд, использую синтаксис бритвы, чтобы показать кнопку, если это значение равно true.Не совсем уверен, почему это всегда ложно.Я проверял это, используя JAWS, а также Narrator, который появляется на всех компьютерах, если вы используете Windows 10, я думаю.Любая помощь приветствуется.Спасибо всем!

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Я думаю, что вы можете только проверить, есть ли у пользователя расширения chrome или что-то подобное, работающее на стороне клиента с javascript.

Идея : Вы можете создать exe или bath файл для проверки пользователей системы и отправки информации об этом на ваш сервер.Если пользователь скачал этот файл, а программа чтения с экрана отсутствует, загрузите страницу.В противном случае выдайте ошибку о программе чтения с экрана.И когда ответ приходит с компьютера пользователя, возможно, вы можете использовать SignalR для показа контента пользователю.Вы можете сделать этот файл обязательным для работы в системе пользователей и начать загрузку этого файла, когда пользователь загрузит страницу.Это не очень хороший способ, но, может быть, вы можете проверить это таким способом.

0 голосов
/ 22 октября 2018

Свойство HttpRequest.Browser возвращает объект HttpBrowserCapabilities , который задействует возможности устройства, сделавшего запрос.Помните, что ASP.NET использует строку User-Agent , отправленную как часть HTTP-запроса, для идентификации клиента.Затем, чтобы заполнить свойства HttpBrowserCapabilities, ASP.NET обрабатывает строку агента пользователя, используя набор предустановленных файлов браузера, которые находятся в следующем расположении:% SystemRoot% \ Microsoft.NET \ Framework \ v4.0.30319 \ CONFIG \Браузеры

Класс HttpBrowserCapabilities

Существуют также сторонние организации, которые гораздо более детализированы и обновляются с помощью информации об обнаружении устройства, например 51 градусов

0 голосов
/ 22 октября 2018

Невозможно определить, работает ли пользователь с программой чтения с экрана.Если бы это было возможно, это открыло бы дверь для недобросовестных людей, которым нужно было бы ориентироваться на людей с ограниченными возможностями, или для предоставления совершенно другого «доступного» браузера, а не для создания интерфейсов, которые бы содержали дизайн.

Вы можете создать кнопку, которая находится за пределами экрана, но все еще в порядке табуляции, и сделать ее видимой, когда она получает фокус.Тогда слепые пользователи смогут найти его, и зрячие пользователи клавиатуры не будут думать, что произошло что-то странное, когда кнопка получила фокус.

...