繁体   English   中英

如何从Windows控件的文本框中获取文本? 我怎么知道这是一个文本框?

[英]How to get text from a windows control's textbox? and how do I know it's a textbox?

我使用spy ++来查找所需Windows控件的正确句柄,该控件属于不受管理的独立应用程序。 请注意,spy ++“属性检查器”提到此窗口没有任何子(或父)窗口。

我还设法通过以下代码获取了窗口的名称:

   //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模式下,它都无法专注于窗口中的文本。


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

除了使用GetWindowText,WM_GETTEXT或UI自动化之外,还有其他方法可以从此窗口获取数据吗?

我对这些东西还很陌生,但是我正在努力学习。 另外,我目前没有潜在客户,因此任何有用的评论/答案将不胜感激! 如果您确实要回答, 请务必添加有用的关键字,这样我就可以了解有关您的解决方案的更多信息

标签(即静态控件)和文本框是带有它们自己的句柄的子窗口,因此它们对于Spy ++是可见的。 如果目标窗口没有子窗口,则它不使用标签或文本框,而是在绘制文本本身,并且您将无法使用GetWindowTextWM_GETTEXT检索它。

文本可以通过UI Automation (屏幕阅读器使用的API)公开。 使用UISpy.exe或Inspect.exe查看文本是否可访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM