在外部程序窗口中查找给定控件的最简单方法是什么?

时间:2010-08-22 17:09:00

标签: c++ winapi

使用WinApi在外部程序窗口中查找给定控件的最佳方法是什么?

例如,我正在尝试更改Internet Explorer的网址文本框。我无法以编程方式获取文本框的句柄。我知道它的类型是“编辑”,但我想避免在所有子窗口中搜索“编辑”控件(这就是我目前正在做的事情)。

窗口上的给定控件是否有任何类型的唯一标识符?我尝试使用“控制ID”,但它似乎没有用。

由于

2 个答案:

答案 0 :(得分:2)

当您深入研究另一个应用程序的窗口时,该窗口并非旨在为您提供对其窗口的任何特定访问权限,那么您实际上并没有任何简单的解决方案。您必须使用FindWindowExGetWindowEnumChildWindowsthe rest等功能。

然而,即使这样做也常常不是一个好主意。 Internet Explorer可能在您正在开发的特定版本中的特定层次结构中具有某些类型的窗口。但是这些窗口和层次结构在以前的版本中可能会有所不同,并且在将来的版本中会有很大差你无法保证这些事情。

在某些情况下,您可能会调查是否有其他更正式的方法来控制其他程序。例如,Internet Explorer公开了可用于多种用途的COM object。因为这是一个官方界面,所以您可以更好地保证支持以前版本的版本,以及未来版本不会中断。

答案 1 :(得分:1)

最好的方法是逐步找到它。使用FindWindow找到IE窗口,然后使用FindWindowEx找到该窗口的子窗口,然后使用FindWindowEx找到该子窗口...直到您进入文本框。

有一个我能想到的程序可以生成VB代码,从应用程序拖动图标到任何其他应用程序的任何部分.VB已经很老了,但它会让你非常清楚如何做到这一点!

它被称为API间谍,位于http://patorjk.com/blog/software/上的“可下载的应用程序(仅限Windows)”下