pywin32 获取窗口句柄_Excel VBA | 这个窗口居然关不掉
生活随笔
收集整理的這篇文章主要介紹了
pywin32 获取窗口句柄_Excel VBA | 这个窗口居然关不掉
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我的目標:讓中國的大學生走出校門的那一刻就已經具備這些office技能,讓職場人士能高效使用office為其服務。支持我,也為自己加油!
還有關不掉的窗體?
先來看下效果:
通過上圖,大家很容易看出二者之間的區別,有些情況下,我們需要這種窗體,比如網頁中彈出的廣告,沒有關閉按鈕,用戶無法關閉。那怎么創建一個無標題欄的窗體呢?Excel本身并沒有提供一種直接的方法來顯示無標題欄的用戶窗體,只能借助于API函數實現。上述案例中無標題欄窗體的創建方法如下:一、在VBE中添加窗體,插入一個Label,Caption屬性按圖中進行修改。這里有一個問題,在Label中輸入文字后需要斷行怎么斷?按Ctrl+Enter。二、雙擊窗體,在窗體中輸入如下代碼:#If VBA7 And Win64 Then Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long#Else Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long#End?IfConst GWL_STYLE = -16Const?WS_CAPTION?=?&HC00000Private Sub UserForm_Initialize() Dim lngWindow As Long, lFrmHdl As Long lFrmHdl = FindWindowA(vbNullString, Me.Caption) lngWindow = GetWindowLong(lFrmHdl, GWL_STYLE) lngWindow = lngWindow And Not WS_CAPTION Call SetWindowLong(lFrmHdl, GWL_STYLE, lngWindow) Call DrawMenuBar(lFrmHdl)End?Sub向左滑動可以查看完整代碼
看著很復雜,難在對四個API函數的理解上,梳理下,其實也沒那么復雜。整段代碼分兩部分,第一部分,因為要使用API函數,所以要進行聲明,因為涉及到32位和64的office版本,所以聲明時用#If VBA7 And Win64 Then#Else#End?If的結構。64位的Excel中相比32位的Excel聲明API函數就多了一個關鍵字PtrSafe,其它的都一樣,而每個API函數的聲明在網上都可以查到,所以這些沒必要記,只要知道哪個API函數可以干什么事情就可以了。Sub過程部分,在窗體初始化時,首先要FindWindowA函數獲取到這個窗體的句柄。關于句柄(handle),大家可以百度,簡單理解的話就是每打開一個窗口,系統就會給該窗口分配一個句柄,系統想要對這個窗口做出響應是要通過該句柄進行的。就像公司給每個員工分配一個工號道理差不多。獲取到該窗體的句柄后,通過GetWindowLong函數獲取到該窗口的信息,GWL_STYLE為該函數的第二個參數的一個常量,表示要獲取的窗口樣式。lngWindow = lngWindow And Not WS_CAPTION表示從獲取到的窗口樣式中除去WS_CAPTION(窗體的標題),即lngWindow代表的樣式為無標題樣式。然后用SetWindowLong函數為窗口重新設置信息,然后用DrawMenuBar函數重畫窗口。以上便是無標題窗口的創建方法。本節的分享就到這里,鵬哥祝大家每天都有進步。
聚米為谷
博學宏才
更多學習內容
手機端請掃描
電腦端請登錄
www.mihong.top
您點的每個贊,我都認真當成了喜歡 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的pywin32 获取窗口句柄_Excel VBA | 这个窗口居然关不掉的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @mapperscan注解_Spring
- 下一篇: android智能老人机系统,国产老人机