0

スプラッシュ スクリーンに 2 つのテキスト ボックス コントロールを持つ WPF アプリケーションがあります。

ここで、このテキスト ボックスにテキストを設定する必要があります。通常、私は制御ウィンドウを見つけFindWindowExて呼び出しますSetWindowTextが、問題はここにウィンドウが表示されないことです。

ウィンドウを開いSpy++ても、ウィンドウ自体しか表示されません。子供はまったくいません。何が起こっているのか説明していただけますか?WPF の他の場所で動作しますか? HWND通常のハンドルが付いた通常のウィンドウではありませんか?これらのコントロールにテキストを設定するにはどうすればよいですか?

コメントで提案されているように試してみたところSnoop、いくつかのウィンドウは表示されましたが、スプラッシュ画面のコントロールは表示されませんでした。また、手動でではなく、C# アプリケーションから自動的にこれを行いたいと考えていますSnoop。ソースを入手しましたが、Snoopこれを行うにはアプリケーションに何かを追加する必要があるようです。そうですか?

別のプロセスから WPF コントロールのテキストを設定するのは本当に難しいですか?

4

2 に答える 2

1

解決策は、 Microsoft UI オートメーションを使用することです

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!");
        }
    }
}
于 2014-04-19T10:23:08.677 に答える
0

WPFウィンドウ用のカスタムウィンドウメッセージを作成できると思います(たとえば、識別子1234を使用)。その後、別のプロセスから PostMessage WinAPI 関数を使用して、設定したい文字列でこの 1234 メッセージを WPF ウィンドウに投稿できます。WPF ウィンドウには、既定のメッセージ処理手順のオーバーライドがあり、識別子 1234 のメッセージに遭遇すると、WPF エンジン クラスとメソッドを使用して適切なコントロールのテキストを設定します。

于 2014-04-19T09:51:18.203 に答える