我有一个WPF应用程序,在启动画面上有两个文本框控件。
现在我需要在这个文本框中设置一些文本。通常我会找到FindWindowEx
的控制窗口并调用SetWindowText
,但问题是我在这里看不到任何窗口。
即使我打开Spy++
,我看到的唯一窗口就是窗口本身。根本没有孩子。
你能解释一下发生了什么吗?它在WPF的其他地方有用吗?它不只是一个普通HWND
句柄的普通窗口吗?如何在这些控件中设置文本?
我按照评论中的建议尝试Snoop
,我能够看到一些窗口,但不能看到启动画面上的控件。此外,我想从C#应用程序自动执行此操作,而不是手动使用Snoop
。我有Snoop
的来源,看起来你需要在你的应用程序中找到一些东西才能做到这一点。是不是?
从另一个进程为WPF控件设置文本真的很难吗?
答案 0 :(得分:0)
我认为您可以为WPF窗口制作自定义Windows消息(例如,标识符1234)。之后,您可以使用其他进程的PostMessage WinAPI函数将此1234消息发布到您要设置的字符串的WPF窗口。 WPF窗口将覆盖默认消息处理过程,当遇到带有标识符1234的消息时,它将使用WPF引擎类和方法设置适当的控件文本。
答案 1 :(得分:0)
解决方案是使用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!");
}
}
}