相信在window按鍵突破專家沒有出來的時候,很多人還不知道軟體還可以這樣編的吧,本人也是一樣,當知道有window按鍵突破專家這個軟體時,仔細去想一下它的實現原理,才突然恍然大悟,原來原理居然是這麼的簡單,為什麼以前我就沒有想到呢。
好了,不說那麼多廢話,直接進入主題,我先是說說按鍵突破的原理。實現按鍵突破的其實就是EnableWindow這個函數。
BOOL EnableWindow(
HWND hWnd,
BOOL bEnable
);
hWnd 指定將要啟用或者禁用的視窗的控制代碼;
bEnable 若為TRUE則啟用視窗,為FALSE則禁用視窗;
只要把EnableWindow的第二個參數設定為TRUE,第一個參數填控制項的控制代碼就將原來被禁止的控制項重新變為可用。
現在的主要的問題是怎麼得到控制項的控制代碼,用vc++的朋友,應該都用過spy++這個強大的工具吧,它可以得到任意控制項的控制代碼,和視窗的類名,看完這篇文章後,讀者們也可以自己做一個屬於自己的spy++啦。
先介紹一下RealChildWindowFromPoint這個函數。該函數的功能是用來擷取在指定點上的子視窗的控制代碼 :
HWND RealChildWindowFromPoint(
HWND hwndParent, // 父視窗的控制代碼
POINT ptParentClientCoords // 以客戶座標指定的點
)
傳回值 :
返回其子視窗控制代碼
RealChildWindowFromPoint函數只能夠尋找到由 ptParentClientCoords 所得到的子視窗,但是無法得到最深層的視窗,也就是說如果有兩個視窗重疊,就無法見到下面的視窗,這樣的情況是經常出現的。
“第一個子視窗”的視窗和“最深層的視窗”的複選框視窗就重疊了,如果用 RealChildWindowFromPoint 就只能得到“第一個子視窗”的視窗,而無法的到“最深層的視窗”的複選框,所以只簡單的調用這個函數是無法實現Spy++的功能的。
大家來看看這個函數,這個函數會將滑鼠所在的位置的視窗控制代碼賦予*phWnd。讀者下次想得實現spy++的功能就調用這個函數就可以了。