像Spy ++这样的软件如何获取信息?

时间:2009-04-19 06:30:37

标签: windows winapi desktop

我正在研究一种用于测试自动化的软件。为了让它工作,需要在桌面和所有打开的窗口上“看看”。它需要知道哪些窗口是打开的以及它们包含哪些控件。所以它必须做类似于Spy ++正在做的事情(来自Visual Studio的Spy ++)。 有谁知道Spy ++如何得到所有信息? 有没有可以调用的Windows方法来检索有关打开窗口的信息?

2 个答案:

答案 0 :(得分:8)

您可以使用EnumWindows获取所有顶级窗口。在lpEnumFunc中,您可以调用FindWindowEx来获取每个顶级窗口的子窗口/控件,然后调用任何其他有趣的函数来为您提供所需的信息,例如: GetClassNameGetClassInfoGetClientRect等。请查看here了解更多信息

答案 1 :(得分:4)

它被称为windows hook。检查Win32 API SetWindowHookEx

有不同类型的钩子,它们驻留在DLL中,并且Windows调用DLL函数用于特定线程的Windows消息类型或同一桌面中的所有线程。

另请参阅我的related answer on Windows hooks here