0

Windows アプリ (Windows フォーム アプリケーション) があります。ウィンドウ タイルを含む現在のウィンドウ内のすべてのテキストと、ウィンドウ内のすべての要素のすべてのテキストを取得するオートメーションを実行する必要があります。

SendMessage と GetWindowText を使用してみましたが、ウィンドウ タイルのみが返されますが、ウィンドウ内のテキストも取得する必要があります。

ウィンドウ内のすべてのテキストを取得できる方法はありますか?
それとも、すべての要素をループしてテキストを取得する必要がありますか? そしてそれを行う方法は?

前もって感謝します。

4

2 に答える 2

1

ウィンドウ内のすべてのテキストを取得できる方法はありますか?

いいえ、または「テキストがどのようにレンダリングされるかを知らなくても」ではありません。

Window に他のコントロール (ラベルなど) が含まれている場合は、それらのコントロールを列挙してテキストを取得する必要があります。

テキストがウィンドウの表面に直接描画されている場合 (WM_PAINTハンドラー内など)、表示されているのは単なるビットマップであり (テキストは失われています)、テキストを復元する簡単な方法はありません。アプリケーション (OCR は別のオプションです)。

于 2013-08-22T09:03:32.847 に答える
0

フォーム上のすべての要素をトラバースし、それらのテキスト値を個別に取得する必要があります。

この再帰関数は、指定したコントロールとそのすべての子コントロールのすべてのテキスト値の文字列リストを返します。

private List<string> getStrings(Control control)
{
    List<string> retval = new List<string>();
    if (control.Text != "")
        retval.Add(control.Text);

    foreach (Control child in control.Controls)
        retval.AddRange(getStrings(child));

    return retval;
}

したがって、メイン フォームからこれを呼び出す場合は、次のように呼び出します。 List<string> allStrings = getStrings(this);

ただし、この関数はフォーム上のすべてのコントロールのテキスト値のみを返し、それらの子コントロールを再帰的に追跡することに注意してください。たとえば、一部のコントロール (ListBox など) には、この関数によって返されないテキスト値の完全なリストが含まれている場合があります。そのためには、関数を多少拡張してコントロールのタイプをテストし、該当する場合は具体的にその内容を返す必要がある場合があります。

于 2013-08-22T09:45:47.037 に答える