###### Window Shading (roll up a window to its title bar) -- by Rajat

This script reduces a window to its title bar and then back to its original size by pressing a single hotkey. Any number of windows can be reduced in this fashion (the script remembers each). If the script exits for any reason, all "rolled up" windows will be automatically restored to their original heights.

Download This Script | Other Sample Scripts | Home

    ; Set the height of a rolled up window here.  The operating system
    ; probably won't allow the title bar to be hidden regardless of
    ; how low this number is:
    ws_MinHeight = 25

    ; This line will unroll any rolled up windows if the script exits
    ; for any reason:
    OnExit, ExitSub
    return  ; End of auto-execute section

    #z::  ; Change this line to pick a different hotkey.
    ; Below this point, no changes should be made unless you want to
    ; alter the script's basic functionality.
    ; Uncomment this next line if this subroutine is to be converted
    ; into a custom menu item rather than a hotkey.  The delay allows
    ; the active window that was deactivated by the displayed menu to
    ; become active again:
    ;Sleep, 200
    WinGet, ws_ID, ID, A
    Loop, Parse, ws_IDList, |
    {
        IfEqual, A_LoopField, %ws_ID%
        {
            ; Match found, so this window should be restored (unrolled):
            StringTrimRight, ws_Height, ws_Window%ws_ID%, 0
            WinMove, ahk_id %ws_ID%,,,,, %ws_Height%
            StringReplace, ws_IDList, ws_IDList, |%ws_ID%
            return
        }
    }
    WinGetPos,,,, ws_Height, A
    ws_Window%ws_ID% = %ws_Height%
    WinMove, ahk_id %ws_ID%,,,,, %ws_MinHeight%
    ws_IDList = %ws_IDList%|%ws_ID%
    return

    ExitSub:
    Loop, Parse, ws_IDList, |
    {
        if A_LoopField =  ; First field in list is normally blank.
            continue      ; So skip it.
        StringTrimRight, ws_Height, ws_Window%A_LoopField%, 0
        WinMove, ahk_id %A_LoopField%,,,,, %ws_Height%
    }
    ExitApp  ; Must do this for the OnExit subroutine to actually Exit the script.