Установить управляющий текст для приложения 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.