如何在C#中的Windows应用程序中获取窗口的全部文本

本文关键字:窗口 获取 全部 文本 应用程序 中的 Windows | 更新日期: 2023-09-27 18:28:31

我有一个Windows应用程序(Windows窗体应用程序)。我需要运行一个自动化程序来获取当前窗口中的所有文本,包括窗口平铺,以及窗口内所有元素的所有文本。

我尝试使用SendMessage和GetWindowText,它只返回窗口平铺,但我也需要获取窗口内的文本。

有没有一种方法可以抓取窗口中的所有文本
还是我需要循环浏览所有元素,并获取文本?以及如何做到这一点?

提前谢谢。

如何在C#中的Windows应用程序中获取窗口的全部文本

有没有一种方法可以抓取窗口中的所有文本?

不,或者更确切地说是"不知道文本是如何呈现的"。

如果窗口包含其他控件(例如标签),则需要枚举这些控件并获取它们的文本。

如果文本被直接绘制到窗口的表面上(例如,在WM_PAINT处理程序中),那么它只是一个正在显示的位图(文本已经丢失),如果应用程序没有提供任何内容,就没有简单的方法来恢复它(OCR是另一种选择)。

您必须遍历表单上的所有元素,并分别获取它们的文本值。

此递归函数将返回指定控件及其所有子控件的所有文本值的字符串列表。

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)可能有一个完整的文本值列表,该函数不会返回该列表。要做到这一点,您可能需要对函数进行一些扩展,以测试控件的类型,并在适用的情况下返回其内容。