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