C# 如何从windows控件获取文本';什么是文本框?我怎么知道呢';什么是文本框?

C# 如何从windows控件获取文本';什么是文本框?我怎么知道呢';什么是文本框?,c#,winapi,ui-automation,sendmessage,windows-controls,C#,Winapi,Ui Automation,Sendmessage,Windows Controls,我已经使用spy++找到了想要的windows控件的正确句柄,它属于一个独立的应用程序,不受管理。 请注意,spy++“property inspector”提到此窗口没有任何子(或父)窗口 我还使用以下代码获取了窗口的名称: //the invokes are included aswell const int WM_GETTEXT = 0x000D; static void Main(string[] args) { IntPtr handle

我已经使用spy++找到了想要的windows控件的正确句柄,它属于一个独立的应用程序,不受管理。 请注意,spy++“property inspector”提到此窗口没有任何子(或父)窗口

我还使用以下代码获取了窗口的名称:

   //the invokes are included aswell
    const int WM_GETTEXT = 0x000D;
    static void Main(string[] args)
    {
        IntPtr handle = new IntPtr(Convert.ToInt32("00070818", 16)); 
        int nChars = GetWindowTextLength(handle); //win32 function
        int length = 200;
        StringBuilder sb = new StringBuilder(length);
        SendMessage(handle, WM_GETTEXT, length, sb);
        Console.WriteLine(sb.ToString());           

    }
这个窗口比它的标题有更多的信息,这就是我用WM_GETTEXT得到的所有信息(将length的值更改为200没有帮助,无论如何,这是一个很长的过程)

接下来,我尝试了一种使用UI自动化的不同方法:

static void Main(string[] args)
{
    AutomationElement target = AutomationElement.FromHandle(handle);
    TextPattern textPattern = target.GetCurrentPattern(TextPattern.Pattern) as TextPattern;
}
但我得到了这个错误:

UIAutomationClient.dll中发生类型为“System.InvalidOperationException”的未处理异常

附加信息:不支持的模式

最重要的是,我也尝试过使用Microsoft Inspect.exe,但无论是在UI自动化模式还是MSAA模式下,它都无法关注窗口中的文本


这是否意味着用户界面自动化无法实现数据??还是我应该使用错误的方法/类型

除了使用GetWindowText、WM_GETTEXT或UI automation之外,还有其他方法从该窗口获取数据吗

我对这东西还不太熟悉,但我正在努力学习。此外,我还没有最新的线索,因此任何有用的评论/回答都将不胜感激!! 如果您确实回答了,请确保包含有用的关键字,以便我能够了解有关您的解决方案的更多信息

标签(即静态控件)和文本框是具有自己句柄的子窗口,因此Spy++可以看到它们。如果您的目标窗口没有子窗口,那么它不是使用标签或文本框,而是绘制文本本身,您将无法使用
GetWindowText
WM\u GETTEXT
检索它


文本可能通过屏幕阅读器使用的API公开。用于查看文本是否可访问。

这是
System.Windows.Automation
的作业。询问
TextPattern
。除了UI自动化和我尝试的第一种方法之外,还有其他可能性吗?它们是两种标准方法。其他可能性取决于应用程序的编写方式。e、 如果它使用GDI,你可以插入一个DLL并截取TextOut函数。但它可能使用的是Direct2D。或者,它可能使用内部库将文本渲染为位图并输出。您需要调试应用程序,找出它是如何输出文本的,并截获它。这并不简单。所以你是说使用“API挂钩”进行调试将帮助我前进??或者您是否引用了其他调试方法?谢谢你的帮助,也很抱歉,你真是个笨蛋。我建议您了解应用程序正在做什么。调试器是一种可能有助于实现这一点的工具。一旦你知道应用程序是如何输出文本的,那么API挂钩可能是拦截它的一种方式。你能说出我可以用来继续搜索答案的任何相关关键字/术语吗??我只是有点被“调试”、“外部应用程序”、“如何”输出“文本”T\T卡住了