版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处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,否则将一直枚举下去。
有了上面的知识,我想你应该知道怎么做了。