2014-09-29 51 views
0

我想枚举使用user32.dll窗口内的所有控件,但我不知道我需要做什么。枚举窗口内的所有控件

我使用EnumWindowsEnumChildWindows,但它不检索窗口内的所有控件。

我想在Delphi应用程序中获取一些标签的文本。

我尝试过使用Spy ++,但是它也没有列出。

+0

Delphi使用自定义控件的范围EnumChildWindows将无法工作。不幸的是,我不知道是否有解决方案。 – 2014-09-29 18:40:23

回答

0
IList<IntPtr> childern = new List<IntPtr>(); 
    WNDENUMPROC enumChildProc = delegate(IntPtr hwnd, IntPtr param) 
    { 
     childern.Add(hwnd); 
     return true; 
    }; 
    EnumChildWindows(Hwnd, enumChildProc, IntPtr.Zero); 
    return childern; 

Hwnd是父窗口句柄

+0

我正在做这样的事情,但不检索窗体内的所有控件。 – 2014-09-29 15:36:52

+0

@Alexandre Vicenzi:你确定这个控件真的是窗户吗? – Xearinox 2014-09-29 17:43:04

+0

我认为这是组件。我在C#中创建了一个小应用程序,并且正常工作。 – 2014-09-29 20:11:04

0

Delphi的标记物是不加窗。这意味着你不可能希望为他们获得窗口句柄,因为他们不是窗口。

如果Delphi VCL正确支持自动化,那么您将能够使用UI Automation来检查这些控件的文本。但是VCL只支持底层Win32控件的自动化操作。由于标签不是窗口控件,因此您运气不佳。

唯一可以切实希望阅读此文本的是Delphi代码。听起来好像这对你不可行。