Поэтому я сейчас пытаюсь проверить, использует ли пользователь программу чтения с экрана на нашем сайте.Причина, по которой я хотел бы проверить, есть ли они, заключается в том, что наш сайт предоставляет учебный модуль, в котором, если они используют программу чтения с экрана, я хотел бы показать кнопку, которая позволила бы им загрузить печатную версию обучения.
Вот что я пробовал до сих пор:
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, я думаю.Любая помощь приветствуется.Спасибо всем!