Установить управляющий текст для приложения WPF

У меня есть приложение WPF с двумя элементами управления текстовым полем на заставке.

Теперь мне нужно установить текст в этих текстовых полях. Обычно я бы нашел окно управления с FindWindowEx и позвонить SetWindowTextНо проблема в том, что я не вижу здесь никаких окон.

Даже когда я открываю Spy++ единственное окно, которое я вижу, - это само окно. Нет детей вообще. Не могли бы вы объяснить, что происходит? Это работает где-то еще в WPF? Разве это не обычное окно с нормальным HWND справиться? Как я могу установить текст в этих элементах управления?

Я старался Snoop как предложено в комментариях, и я смог увидеть некоторые из окон, но не элементы управления на заставке. Также я хотел бы сделать это автоматически из приложения C#, а не вручную с Snoop, У меня есть источники Snoop и похоже, что вам нужно подключить что-то в ваше приложение, чтобы сделать это. Это правильно?

Неужели так сложно установить текст для элемента управления WPF из другого процесса?

2 ответа

Решение

Решение заключается в использовании Microsoft UI Automation

AutomationElement rootElement = AutomationElement.RootElement;

if (rootElement != null)
{
    Condition condition =
            new PropertyCondition(AutomationElement.NameProperty, "WindowSplash");

    AutomationElement appElement =
            rootElement.FindFirst(TreeScope.Children, condition);

    if (appElement != null)
    {
        Condition condition =
            new PropertyCondition(
                    AutomationElement.AutomationIdProperty, "element1");
        AutomationElement element =
            parentElement.FindFirst(TreeScope.Descendants, condition);

        if (element != null)
        {
            ValuePattern valuePatternB =
                    element.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern;
            valuePatternB.SetValue("hello automation world!");
        }
    }
}

Я думаю, что вы можете сделать собственное сообщение Windows для своего окна WPF (скажем, с идентификатором 1234). После этого вы можете использовать функцию PostMessage WinAPI из другого процесса, чтобы отправить это 1234-сообщение в ваше окно WPF со строкой, которую вы хотите установить. Окно WPF будет иметь переопределение для процедуры обработки сообщений по умолчанию, и при обнаружении сообщения с идентификатором 1234 он будет устанавливать соответствующий текст элемента управления, используя классы и методы механизма WPF.

Другие вопросы по тегам