EnumChildWindows的威力

 

版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處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,否則將一直枚舉下去。

有了上面的知識,我想你應該知道怎麼做了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章