这段代码通过 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
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。