pywin32 获取窗口句柄_Excel VBA | 这个窗口居然关不掉
生活随笔
收集整理的這篇文章主要介紹了
pywin32 获取窗口句柄_Excel VBA | 这个窗口居然关不掉
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我的目標(biāo):讓中國(guó)的大學(xué)生走出校門的那一刻就已經(jīng)具備這些office技能,讓職場(chǎng)人士能高效使用office為其服務(wù)。支持我,也為自己加油!
還有關(guān)不掉的窗體?
先來(lái)看下效果:
通過上圖,大家很容易看出二者之間的區(qū)別,有些情況下,我們需要這種窗體,比如網(wǎng)頁(yè)中彈出的廣告,沒有關(guān)閉按鈕,用戶無(wú)法關(guān)閉。那怎么創(chuàng)建一個(gè)無(wú)標(biāo)題欄的窗體呢?Excel本身并沒有提供一種直接的方法來(lái)顯示無(wú)標(biāo)題欄的用戶窗體,只能借助于API函數(shù)實(shí)現(xiàn)。上述案例中無(wú)標(biāo)題欄窗體的創(chuàng)建方法如下:一、在VBE中添加窗體,插入一個(gè)Label,Caption屬性按圖中進(jìn)行修改。這里有一個(gè)問題,在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向左滑動(dòng)可以查看完整代碼
看著很復(fù)雜,難在對(duì)四個(gè)API函數(shù)的理解上,梳理下,其實(shí)也沒那么復(fù)雜。整段代碼分兩部分,第一部分,因?yàn)橐褂肁PI函數(shù),所以要進(jìn)行聲明,因?yàn)樯婕暗?2位和64的office版本,所以聲明時(shí)用#If VBA7 And Win64 Then#Else#End?If的結(jié)構(gòu)。64位的Excel中相比32位的Excel聲明API函數(shù)就多了一個(gè)關(guān)鍵字PtrSafe,其它的都一樣,而每個(gè)API函數(shù)的聲明在網(wǎng)上都可以查到,所以這些沒必要記,只要知道哪個(gè)API函數(shù)可以干什么事情就可以了。Sub過程部分,在窗體初始化時(shí),首先要FindWindowA函數(shù)獲取到這個(gè)窗體的句柄。關(guān)于句柄(handle),大家可以百度,簡(jiǎn)單理解的話就是每打開一個(gè)窗口,系統(tǒng)就會(huì)給該窗口分配一個(gè)句柄,系統(tǒng)想要對(duì)這個(gè)窗口做出響應(yīng)是要通過該句柄進(jìn)行的。就像公司給每個(gè)員工分配一個(gè)工號(hào)道理差不多。獲取到該窗體的句柄后,通過GetWindowLong函數(shù)獲取到該窗口的信息,GWL_STYLE為該函數(shù)的第二個(gè)參數(shù)的一個(gè)常量,表示要獲取的窗口樣式。lngWindow = lngWindow And Not WS_CAPTION表示從獲取到的窗口樣式中除去WS_CAPTION(窗體的標(biāo)題),即lngWindow代表的樣式為無(wú)標(biāo)題樣式。然后用SetWindowLong函數(shù)為窗口重新設(shè)置信息,然后用DrawMenuBar函數(shù)重畫窗口。以上便是無(wú)標(biāo)題窗口的創(chuàng)建方法。本節(jié)的分享就到這里,鵬哥祝大家每天都有進(jìn)步。
聚米為谷
博學(xué)宏才
更多學(xué)習(xí)內(nèi)容
手機(jī)端請(qǐng)掃描
電腦端請(qǐng)登錄
www.mihong.top
您點(diǎn)的每個(gè)贊,我都認(rèn)真當(dāng)成了喜歡 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的pywin32 获取窗口句柄_Excel VBA | 这个窗口居然关不掉的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @mapperscan注解_Spring
- 下一篇: treeview控件怎么折叠_拍摄的视频