灰色按鈕啟用程式的原理 (學習)

2021-04-12 20:41:46 字數 875 閱讀 7124

首先我們需要明白程式實際上程式中的每個視窗都會有個控制代碼(即:視窗控制代碼)這個控制代碼是唯一的,在同一時刻不會有兩個同樣的控制代碼存在.一般來說灰色按紐啟用程式都是啟用的當前活動的視窗即當前得到焦點的視窗,(其他沒得到焦點的視窗為灰色標題欄)如何得到呢?我們可以用乙個api

getforegroundwindow

這個api即可獲得當前啟用的視窗.返回型別就是乙個控制代碼,函式原形如下:

hwnd getforegroundwindow(void);

下面就是關鍵了.需要用到乙個api

bool enumchildwindows(   

hwnd hwndparent,

wndenumproc lpenumfunc,

lparam lparam);

這個函式的作用為列舉出指定視窗的全部子視窗.視窗的子視窗可以理解為視窗上的控制項,因為這些控制項例如按鈕其實也是視窗,但是他是在視窗上,所以為子視窗,同理,用getforegroundwindow獲得到的自然是父視窗的控制代碼了.

這個可能不大好理解,簡單的說就是那些例如按鈕之類的控制項都是子視窗,所以我們用上面那個api可以把這些控制項列舉出來,這個函式是需要乙個**函式的.

先說明下這個api的引數,第乙個為父視窗的控制代碼,第二個為**函式的指標,第三個一般為null他的意思是給**函式的引數,必要的時候可以通過這個傳遞乙個指標給**函式.

下面看下**函式.

這樣系統每列舉乙個控制項就會呼叫一次這個函式.啟動第乙個引數就是控制項的控制代碼.

例如我們做如下判斷

if (!::iswindowenabled(hwnd))

這樣灰色的按鈕就可以被啟用了.

感謝:http://tbxy.blog.com.cn/archives/2006/1578246.shtml

BIOS的啟動原理學習 載入引導程式

在windows系統以及有圖形介面的其他作業系統中要想執行乙個程式,必須在視窗中雙擊它,或者在命令列介面中輸入相應的執行命令。從計算機底層機制上講,這其實是在乙個已經執行起來的作業系統的視覺化介面或命令列介面中執行乙個程式。感覺要進入先有雞還是先有蛋的迴圈之中了。但是,在開機加電的一瞬間,記憶體中什...

編譯原理 學習記錄1 程式編譯過程

前端 該階段的編譯工作主要依賴源程式,與目標機無關。語法分析 在詞法分析基礎上,將單詞序列分解成各類語法短語 也稱語法單位,如 程式 語句 表示式 可表示成語法樹 推導樹 通過語法分析,確定乙個輸入串是否構成乙個語法上正確的程式。即 經語法分析可以得到乙個分析樹。問 如何根據單詞序列構造語法分析樹?...

UFS和EMMC的區別 原理學習

ufs pk emmc ufs作為目前安卓智慧型手機最先進的非易失儲存器 nvm 已經廣泛應用在很多手機oem的旗艦機型上,並會逐漸取代emmc的地位。它不僅給智慧型手機帶來更高的讀寫速度更可靠的穩定性,同時m phy,unipro和對scsi命令集的支援,也大大簡化了設計的複雜度,從而縮短了手機上...