Silverlight: как заставить программу чтения с экрана что-то прочитать?

Silverlight хорошо делает дерево автоматизации доступным, но есть ли способ программно попросить программу чтения с экрана что-то прочитать? До сих пор я использовал:

        AutomationPeer peer = FrameworkElementAutomationPeer.FromElement(element);
        if (peer == null)
        {
            peer = FrameworkElementAutomationPeer.CreatePeerForElement(element);
        }
        if (peer != null)
        {
            peer.RaiseAutomationEvent(AutomationEvents.AutomationFocusChanged);
        }

Это прекрасно работает в среде выполнения отладки Silverlight (т.е. если я запускаю IE из VS), но не работает, если я запускаю IE вне Visual Studio (даже если он указывает на тот же внутренний сервер разработки...). Итак, есть ли другой простой способ попросить программу чтения с экрана что-то прочитать?

РЕДАКТИРОВАТЬ: он также отлично работает в MS Narrator, но не в NVDA... странно.


person Robert Fraser    schedule 17.06.2011    source источник
comment
Действительно ли элемент сфокусирован в этот момент времени (непосредственно перед отправленным им событием) - т.е. Свойство IsFocused возвращает значение true? Некоторые программы чтения с экрана будут игнорировать события фокуса, которые исходят от элементов, которые не кажутся на самом деле сфокусированными, и отклоняют их как «фиктивные» события. Может быть, а может и не быть здесь, но одну вещь стоит проверить.   -  person BrendanMcK    schedule 17.06.2011
comment
Нет, он не сфокусирован; это был просто хак, который иногда работал. Я хочу иметь возможность заставить программу чтения с экрана читать то, что не сфокусировано (и никогда не будет сфокусировано).   -  person Robert Fraser    schedule 21.06.2011


Ответы (1)


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

person justin.m.chase    schedule 13.09.2011