Windows10 x64下如何用VBA实现无标题栏及任务栏的完全全屏?
在VBA中实现Windows 10 x64下的完全全屏效果(隐藏标题栏和任务栏)
要在Windows 10 x64系统的VBA中实现完全全屏(隐藏窗口标题栏、任务栏),需要结合修改Office程序窗口样式和控制任务栏状态两部分操作,以下是适配该系统的完整实现方案:
完整代码实现
将以下代码粘贴到VBA模块中:
' 声明Windows API函数(兼容32/64位VBA环境) #If VBA7 Then Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr Declare PtrSafe Function SetWindowLongPtr Lib "user32.dll" Alias "SetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr Declare PtrSafe Function GetWindowLongPtr Lib "user32.dll" Alias "GetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr Declare PtrSafe Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As LongPtr Declare PtrSafe Function ShowWindow Lib "user32.dll" (ByVal hwnd As LongPtr, ByVal nCmdShow As Long) As Long #Else Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long #End If ' API常量定义 Public Const GWL_STYLE = -16 Public Const WS_CAPTION = &HC00000 Public Const WS_THICKFRAME = &H40000 Public Const SW_SHOWMAXIMIZED = 3 Public Const ABM_GETSTATE = &H4 Public Const ABM_SETSTATE = &HA Public Const ABS_AUTOHIDE = &H1 Public Const ABS_ALWAYSONTOP = &H2 Public Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Public Type APPBARDATA cbSize As Long hwnd As LongPtr uCallbackMessage As Long uEdge As Long rc As RECT lParam As Long End Type ' 保存原始状态,用于退出全屏时恢复 Private originalWindowStyle As LongPtr Private originalTaskbarState As Long ' 进入完全全屏模式 Sub EnterFullScreen() Dim appHwnd As LongPtr Dim abd As APPBARDATA ' 1. 获取当前程序窗口句柄并保存原始样式 appHwnd = FindWindow("XLMAIN", Application.Caption) ' Excel类名为XLMAIN,Word用OpusApp,PPT用PPFrameClass originalWindowStyle = GetWindowLongPtr(appHwnd, GWL_STYLE) ' 2. 获取并保存任务栏原始状态 abd.cbSize = Len(abd) originalTaskbarState = SHAppBarMessage(ABM_GETSTATE, abd) ' 3. 隐藏程序标题栏与边框 SetWindowLongPtr appHwnd, GWL_STYLE, originalWindowStyle And Not (WS_CAPTION Or WS_THICKFRAME) ShowWindow appHwnd, SW_SHOWMAXIMIZED ' 4. 设置任务栏自动隐藏 abd.lParam = ABS_AUTOHIDE SHAppBarMessage ABM_SETSTATE, abd ' 5. 隐藏Office自带的功能区与状态栏 Application.DisplayFullScreen = True Application.CommandBars("Status Bar").Visible = False End Sub ' 退出完全全屏模式,恢复原始状态 Sub ExitFullScreen() Dim appHwnd As LongPtr Dim abd As APPBARDATA appHwnd = FindWindow("XLMAIN", Application.Caption) ' 1. 恢复程序窗口样式 SetWindowLongPtr appHwnd, GWL_STYLE, originalWindowStyle ShowWindow appHwnd, SW_SHOWMAXIMIZED ' 2. 恢复任务栏原始状态 abd.cbSize = Len(abd) abd.lParam = originalTaskbarState SHAppBarMessage ABM_SETSTATE, abd ' 3. 恢复Office界面元素 Application.DisplayFullScreen = False Application.CommandBars("Status Bar").Visible = True End Sub
关键说明
- 环境适配:通过
#If VBA7 Then分支判断,同时兼容32位和64位VBA环境,确保在Windows 10 x64下稳定运行。 - 窗口样式修改:移除
WS_CAPTION(标题栏)和WS_THICKFRAME(窗口边框)属性,配合最大化操作实现无框全屏。 - 任务栏控制:调用
SHAppBarMessage将任务栏设为自动隐藏,避免全屏时任务栏遮挡界面。 - 状态恢复:提前保存原始窗口样式和任务栏状态,退出全屏时可完全还原操作前的界面。
使用注意事项
- 需在VBA编辑器中开启信任对VBA项目对象模型的访问(路径:文件→选项→信任中心→信任中心设置→宏设置)。
- 运行
EnterFullScreen进入全屏,ExitFullScreen恢复正常状态;建议将这两个宏添加到快速访问工具栏,方便快速切换。 - 若用于Word/PowerPoint,需修改
FindWindow的类名:Word对应OpusApp,PowerPoint对应PPFrameClass。
内容的提问来源于stack exchange,提问作者EdsonLopes
相关产品推荐
相关产品推荐

