EnumChildWindows的威力

来源:互联网 发布:数据库访问接口设计 编辑:程序博客网 时间:2024/04/27 20:21

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处http://xinyistudio.vicp.net/和作者信息及本声明

很早就写过类似spy++和查看密码窗口的东西,一直想给这个小东西再加点特别的。

前段时间对软件安装注册发生了兴趣,有些软件如果你不输入正确注册码,那该死的“下一步”按钮就一直disable。这次我就让spy++彻底spy到底,把那个注册用的按钮置亮,让我轻松进入“下一步”,呵呵...。

我的想法是光标移到指定的窗口上后,探测这个窗口上到底有多少按钮,如果有,就将它们都Enable。

在这里我不想讨论怎样具体实现这个功能,但你要知道的是想得到这些被disable窗口(按钮)的句柄是根本无法通过WindowFromPoint这个API函数得到的,GetWindow也不要妄想了。

顺手查了下MSDN,看到EnumChildWindows可是个好东西,可以枚举一个父窗口的所有子窗口:

BOOL EnumChildWindows(
  HWND
hWndParent,         // handle to parent window // 父窗口句柄
  WNDENUMPROC lpEnumFunc// callback function // 回调函数的地址
  LPARAM lParam            // application-defined value // 你自已定义的参数
);

就这么简单,让我们再定义一个回调函数,像下面这样:

BOOL CALLBACK EnumChildProc(
  HWND
hwnd,      // handle to child window
  LPARAM lParam   // application-defined value
);

注意:这个回调函数要么是类的静态函数,要么就是一个全局的函数。

--------------------------------

在调用EnumChildWindows 这个函数时,直到调用到最个一个子窗口被枚举或回调函数返回一个false,否则将一直枚举下去。

有了上面的知识,我想你应该知道怎么做了。