It is possible to dynamically update the window names of GNU screen when running commands.

Put this line in .screenrc:

caption always "%{= kw}%-w%{= BW}%n %t%{-}%+w %-= %c"

Put this in .zshrc:

function title {
    if [[ $TERM == "screen"* ]]; then
        print -nR $'\033k'$1$'\033\\'
        print -nR $'\033]0;'$2$'\a'
    fi
}

function precmd {
    title "zsh" "$PWD"
}   

function preexec {
    emulate -L zsh
    local -a cmd; cmd=(${(z)1})
    title "$cmd[1]:t" "$cmd[2,-1]"
}

Found here.