这段代码通过 F1 热键 检测当前活动窗口是否以全屏模式显示,并在屏幕上显示检测结果。它主要针对特定场景(如视频播放器全屏模式或游戏全屏模式),并且窗口最大化时不会误判为全屏。
; 视频播放器全屏时生效,原神全屏时生效,窗口最大化时无效
F1::
WinGet, active_id, ID, A
ToolTip % IsFullDisplay(active_id)
Return
; WinActive("A")
; 这个函数不一定有效
IsFullDisplay(hWnd) { ; v0.66 by SKAN on D38S/D391 @ tiny.cc/isfulldisplay
Local
hMon := DllCall("MonitorFromWindow", "Ptr",hWnd, "Int",0x2, "Ptr") ; MONITOR_DEFAULTTONEAREST
, VarSetCapacity(MONITORINFO,40,0), VarSetCapacity(WINDOWINFO,60,0), VarSetCapacity(RECT,16)
, NumPut(40, MONITORINFO, "Int"), DllCall("GetMonitorInfo", "Ptr",hMon, "Ptr",&MONITORINFO)
, NumPut(60, WINDOWINFO, "Int"), DllCall("GetWindowInfo", "Ptr",hWnd, "Ptr",&WINDOWINFO)
, Style:=NumGet(WINDOWINFO, 36, "UInt"), WS_CAPTION:=0xC00000, WS_THICKFRAME:=0x40000
Return ( DllCall("SubtractRect", "Ptr",&RECT, "Ptr",&MONITORINFO+04, "Ptr",&WINDOWINFO+04) = 0
? ( (Style & WS_CAPTION) = 0 ? True : (Style & WS_THICKFRAME) = 0 ? True : False ) : False )
}
; 窗口最大化和全屏窗口都有效判断
是否存在近全屏的窗口() {
WinGet windows, List
Loop %windows% {
id := windows%A_Index%
WinGetTitle title, ahk_id %id%
If (title = "")
Continue
WinGetClass class, ahk_id %id%
; 跳过特定窗口类型
If (class = "AutoHotkeyGUI")
Continue
If (title = "Program Manager") ; 排除桌面
Continue
; 检查窗口是否最小化
WinGet, style, style, ahk_id %id%
If (style & 0x20000000) ; WS_MINIMIZE
Continue
; 跳过不可见窗口
If !(style & 0x10000000) ; WS_VISIBLE
Continue
; 窗口客户区大小至少占据屏幕宽度的 95% 和高度的 92%
VarSetCapacity(rect, 16)
, DllCall("GetClientRect", "uint", id, "uint", &rect)
, width := NumGet(rect, 8, "int")
, height := NumGet(rect, 12, "int")
If (width > A_ScreenWidth * 0.95 && height > A_ScreenHeight * 0.92)
Return 1
}
Return 0
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)