为WPF应用程序设置控件文本



我有一个WPF应用程序,在启动屏幕上有两个文本框控件。

现在我需要在这个文本框中设置一些文本。通常我会找到带有FindWindowEx的控制窗口并调用SetWindowText,但问题是我在这里看不到任何窗口。

即使当我打开Spy++时,我看到的唯一窗口就是窗口本身。根本没有孩子。你能解释一下发生了什么事吗?它在WPF的其他地方工作吗?这不就是一个普通的窗口,有普通的HWND句柄吗?如何在这些控件中设置文本?

我按照评论中的建议尝试了Snoop,可以看到一些窗口,但不能看到启动屏幕上的控件。此外,我想从C#应用程序中自动执行此操作,而不是使用Snoop手动执行。我已经得到了Snoop的来源,看起来你需要将一些东西ijnect到你的应用程序中才能做到这一点。对吗?

从另一个进程为WPF控件设置文本真的那么难吗?

解决方案是使用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!");
        }
    }
}

我认为您可以为您的WPF窗口创建一个自定义的窗口消息(例如,标识符为1234)。之后,您可以使用来自另一个进程的PostMessage WinAPI函数将此1234消息与您想要设置的字符串一起发布到您的WPF窗口。WPF窗口将覆盖默认的消息处理过程,当遇到标识符为1234的消息时,它将使用WPF引擎类和方法设置适当的控件文本。

相关内容

  • 没有找到相关文章

最新更新