Используйте функцию SystemParametersInfo
, передавая uiAction
из SPI_GETSCREENREADER
.
Для этого вам нужно будет использовать, например, P / Invoke :
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;
}
}
}
Возможно, это лучше, чем использование свойства ClientsAreListening
, поскольку это свойство возвращает значение true для любого клиента автоматизации, а не только для программ чтения с экрана.
См. Также:
Вам также необходимо прослушать сообщение WM_SETTINGCHANGE
, чтобы определить, запускается ли программа чтения с экрана.
Обновление (в ответ на комментарии BrendanMcK):
Хотя это никогда явно не задокументировано в таком количестве слов, глядя на описание флага, я думаю, что назначение этого флага относительно ясно:
Определяет, является лиутилита просмотра экрана запущена.Утилита просмотра экрана направляет текстовую информацию на устройство вывода, такое как синтезатор речи или дисплей Брайля.Когда этот флаг установлен, приложение должно предоставлять текстовую информацию в ситуациях, когда оно иначе представляло бы информацию графически.
Это означает, что приложения устанавливают этот флаг всякий раз, когда приложение желает, чтобы пользовательский интерфейс работалкак если бы программа чтения с экрана работала, независимо от того, является ли это приложение на самом деле программой чтения с экрана или нет .
Подходящими действиями в ответ на этот флаг является добавление текста, чтобы «прочитать» интуитивно понятный пользовательский интерфейс пользователя для пользователя .Если радикальные изменения необходимы для того, чтобы сделать вашу программу чтения с экрана пользовательского интерфейса доступной, то есть вероятность, что ваш пользовательский интерфейс также не настолько интуитивно понятен для подписанных пользователей и, вероятно, мог бы сделать это заново.