如何解决AHK制作的屏幕调暗GUI覆盖层在全屏播放视频时消失的问题?
如何解决AHK制作的屏幕调暗GUI覆盖层在全屏播放视频时消失的问题?
嗨,我来帮你搞定这个麻烦!你的AHK调暗GUI在全屏视频里消失,核心原因是PotPlayer、KMPlayer、Windows Media Player这类播放器进入全屏时会启用「独占全屏模式」——这种模式下系统会把播放器窗口的优先级拉到最高,直接覆盖掉其他所有非播放器的顶层窗口,哪怕你加了+AlwaysOnTop也没用。而VLC默认用的是「窗口化全屏」(无边框窗口),所以你的GUI能正常显示,但显然你更习惯用前几个播放器,那咱们直接改脚本就能解决:
优化后的AHK脚本
opacity := 100 ; 创建GUI,添加关键扩展样式确保不被全屏窗口覆盖 Gui 1:New, +AlwaysOnTop -Caption +ToolWindow +E0x20 +E0x80000, ScreenDimmer Gui 1:Color, Black ; 让GUI铺满整个屏幕,不用手动设置位置 Gui 1:Show, x0 y0 h%A_ScreenHeight% w%A_ScreenWidth% NoActivate ; 设置透明度 WinSet Transparent, %opacity%, A ; 定时检查并强制GUI保持置顶,防止全屏切换时被压下去 #Persistent SetTimer, KeepDimmerOnTop, 500 Return KeepDimmerOnTop: ; 强制设置窗口为最顶层(比普通AlwaysOnTop优先级更高) DllCall("SetWindowPos", "Ptr", WinExist("ScreenDimmer"), "Ptr", -1, "Int", 0, "Int", 0, "Int", 0, "Int", 0, "UInt", 0x0001 | 0x0002) ; 确保窗口不获取焦点,不干扰播放器操作 WinSet, ExStyle, +0x80000, ScreenDimmer Return ; 按ESC键退出脚本,方便随时关闭调暗层 Esc::ExitApp
关键修改说明
+E0x80000:给GUI加上「不获取焦点」的属性,这样操作播放器时不会被GUI抢焦点,完全不影响视频播放- 全屏铺满设置:用
A_ScreenHeight和A_ScreenWidth自动适配你的屏幕分辨率,不用手动调整x/y/h/w - 定时置顶机制:每隔500ms用
DllCall强制把GUI拉到最顶层,对付播放器独占全屏的优先级压制特别有效 NoActivate:显示GUI时不会激活它,避免打断正在播放的视频
备选方案:修改播放器全屏模式
如果脚本优化后还是有问题,你可以试试把播放器的全屏模式改成「无边框窗口」(比如PotPlayer里在「全屏设置」里就能切换)——这种模式下播放器不会用独占全屏,你的原始脚本也能正常工作,不过改脚本的方法更通用,不用挨个改播放器设置~
另外顺便提一句:你说VLC点「下一曲」必须先加播放列表,其实VLC支持直接拖整个视频文件夹进去,它会自动生成播放列表,点击下一曲就能直接播放啦,不过这是题外话,重点还是帮你搞定调暗GUI的问题😉
备注:内容来源于stack exchange,提问作者Lori Yagami
相关产品推荐
相关产品推荐

