VB句柄概念-不懂以後深入理解

最近在學習windows API的時候發現在個叫句柄的概念搞不清楚,於是查了一下現在把自己的理解寫出來,後面再貼網上的介紹。句柄是一個代表窗口的正整數,當然窗口的概念在這裏包含了桌面、按鈕、滾動條等,這就是我最簡單的理解了。

以下是網上的介紹:
                        瞭解句柄
在調用 DLL 函數前必須理解的另外一個重要概念是句柄。句柄是一個 32 位的正整數,Microsoft® Windows® 用它來識別窗體或其他對象,例如字體或位圖。

在 Windows 中,窗口可以有許多種。窗口可以是屏幕上的一塊矩形封閉區域,比如您熟悉的應用程序窗口。窗體上的控件(例如列表框或滾動條)也可以是窗口,但並不是所有類型的控件都是窗口。桌面上的圖標和桌面本身也是窗口。

因爲所有這些類型的對象都是窗口,所以 Windows 可以用類似的方式處理它們。Windows 給每個窗口一個唯一的句柄,通過句柄操縱該窗口。許多 API 函數可返回句柄或者接受句柄作參數。

創建窗口時,Windows 給它指派一個句柄,窗口消失後句柄被釋放。雖然句柄在窗口的整個生存期內保持不變,但不能保證某窗口在被損壞並重新創建後還使用原來的句柄。所以,如果在變量中存儲了一個句柄,請記住窗口損壞後句柄就失效了。

例如 GetActiveWindow 函數就可以返回窗口的句柄,這裏的窗口是一個當前活動的應用程序窗口。GetWindowText 函數接受窗口的句柄,如果該窗口有標題,則返回標題。下面的過程用 GetActiveWindow 返回活動窗口的句柄,用 GetWindowText 返回該窗口的標題:

Declare Function GetActiveWindow Lib "user32" () As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal Hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Function ActiveWindowCaption() As String
Dim strCaption As String
Dim lngLen As Long

' 創建由空字符填充的字符串。
strCaption = String$(255, vbNullChar)
' 返回字符串長度。
lngLen = Len(strCaption)

' 調用 GetActiveWindow,返回活動窗口的句柄,
' 把句柄連同字符串和字符串長度一起傳遞給 GetWindowText。
If (GetWindowText(GetActiveWindow, strCaption, lngLen) > 0) Then
' 返回 Windows 寫到字符串中的值。
ActiveWindowCaption = strCaption
End If
End Function
GetWindowText 函數有 3 個參數:窗口句柄;準備接受窗口標題的 NULL 結束字符串;以及該字符串的長度。

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