灰色按钮激活程序的原理 (学习)
首先我們需要明白程序實際上程序中的每個窗口都會有個句柄(即:窗口句柄)這個句柄是唯一的,在同一時刻不會有兩個同樣的句柄存在.一般來說灰色按紐激活程序都是激活的當前活動的窗口即當前得到焦點的窗口,(其他沒得到焦點的窗口為灰色標題欄)如何得到呢?我們可以用一個API
GetForegroundWindow
這個API即可獲得當前激活的窗口.返回類型就是一個句柄,函數原形如下:
HWND?GetForegroundWindow(VOID);
下面就是關鍵了.需要用到一個API
BOOL?EnumChildWindows(???
????HWND?hWndParent,
????WNDENUMPROC?lpEnumFunc,
????LPARAM?lParam
);
這個函數的作用為枚舉出指定窗口的全部子窗口.窗口的子窗口可以理解為窗口上的控件,因為這些控件例如按鈕其實也是窗口,但是他是在窗口上,所以為子窗口,同理,用GetForegroundWindow獲得到的自然是父窗口的句柄了.
這個可能不大好理解,簡單的說就是那些例如按鈕之類的控件都是子窗口,所以我們用上面那個API可以把這些控件枚舉出來,這個函數是需要一個回調函數的.
先說明下這個API的參數,第一個為父窗口的句柄,第二個為回調函數的指針,第三個一般為NULL他的意思是給回調函數的參數,必要的時候可以通過這個傳遞一個指針給回調函數.
下面看下回調函數.
BOOL CALLBACK EnumChildProc(
? HWND hwnd,????? // handle to child window
? LPARAM lParam?? // application-defined value
){
...
}
這樣系統每枚舉一個控件就會調用一次這個函數.啟動第一個參數就是控件的句柄.
例如我們做如下判斷
?if (!::IsWindowEnabled(hwnd))
?{//處理灰色
??????? ::EnableWindow(hwnd,TRUE)
?}
這樣灰色的按鈕就可以被激活了.
感謝: http://tbxy.blog.com.cn/archives/2006/1578246.shtml總結
以上是生活随笔為你收集整理的灰色按钮激活程序的原理 (学习)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GA/百度统计/Piwik/JYC:网站
- 下一篇: OpenCore引导配置说明第十二版-基