用于截取屏幕操作的脚本

sh/bash/dash/ksh/zsh等Shell脚本
回复
glassprogrammer
帖子: 75
注册时间: 2006-05-13 18:08
联系:

用于截取屏幕操作的脚本

#1

帖子 glassprogrammer » 2011-11-20 12:17

可以用来代替 wink 了, 而且, 截屏的数量不再受内存的限制 :)

详细说明见:
http://code.google.com/p/thinkbasenet/w ... wsAndLinux
http://code.google.com/p/thinkbasenet/w ... ellInLinux

代码: 全选

#! /bin/bash

mkdir screenshot
echo "------------------------------------------------------------"

while :
do
    echo -ne "请选择需要录制的窗口 ...  \b"

    # 使用 xwininfo 选择一个窗口并获取其 window id
    xwininfo > screenshot/xwininfo.txt
    WIN_ID=`cat screenshot/xwininfo.txt | grep "xwininfo: Window id:" | cut -d ' ' -f 4`
    WIN_INFO=`xwininfo -id $WIN_ID | grep $WIN_ID`
    echo -e "选中的窗口是: \n  -> $WIN_INFO"

    # 当前需要截取的窗口对应的进程
    PID=`xprop -id $WIN_ID | grep "_NET_WM_PID(CARDINAL)" | cut -d ' ' -f 3`

    while(true); do
        read -p "请输入'y'确认, 输入'n'重新选择: " YES_NO
        case "$YES_NO" in
            [yY]*)
                THE_WIN_ID=$WIN_ID
                break
                ;;
            [nN]*)
                THE_WIN_ID="invalid"
                break
                ;;
            *)
                echo "输入($YES_NO)无效, 必须是 y 或者 n"
                ;;
        esac
    done

    if [ "$THE_WIN_ID" != "invalid" ]; then
        break
    fi
done

PRE_FILE="not-exist"

while(true);do
    # 获取当前活动窗口的 window id
    ACTIVE_WIN_ID=`xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| cut -d ' ' -f 5`
    # 获取当前活动窗口的 PID
    ACTIVE_PID=`xprop -id $ACTIVE_WIN_ID | grep "_NET_WM_PID(CARDINAL)" | cut -d ' ' -f 3`

    FILE_NAME=`date +%Y%m%d-%H%M%S`
    if [ "$ACTIVE_PID" == "$PID" ] ; then
        echo -ne "* \b"
        # 如果活动窗口属于当前进程, 截取活动窗口, 同时使用 -screen 参数, 以便保证界面上的菜单以及工具提示能够被正常截取下来
        import -window $ACTIVE_WIN_ID -screen -frame screenshot/$FILE_NAME.png
    else
        echo -ne ". \b"
        # 如果活动窗口不属于当前进程, 则截取所选择的窗口, 同时不使用 -screen 参数, 避免截取到其他窗口的内容
        import -window $THE_WIN_ID -frame screenshot/$FILE_NAME.png
    fi

    # 和前面截取的文件内容进行比较, 如果没有区别, 则只保留一个文件(减少长时间"发呆"产生大量相同的截图)
    cmp -s screenshot/$FILE_NAME.png screenshot/$PRE_FILE.png
    if [ $? == 0 ] ; then
        echo -ne " [X]$PRE_FILE  \b"
        rm -f screenshot/$PRE_FILE.png
    fi

    PRE_FILE=$FILE_NAME

    sleep 1
done
头像
remeber
论坛版主
帖子: 13030
注册时间: 2009-01-06 15:18
来自: 人间

Re: 用于截取屏幕操作的脚本

#2

帖子 remeber » 2011-11-20 22:26

ee截图脚本(不算广告吧==)
viewtopic.php?f=120&t=125239
“有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞
头像
Ubuntu与Linux
帖子: 1211
注册时间: 2010-06-09 19:57

Re: 用于截取屏幕操作的脚本

#3

帖子 Ubuntu与Linux » 2011-11-21 0:00

mark,以便以后查找窗口ID
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 用于截取屏幕操作的脚本

#4

帖子 eexpress » 2011-11-21 8:39

窗口ID要了干嘛,那除开在程序中才有用。

这类似的,以前我也发过,是截视频的。后来视频都带窗口指定了。
● 鸣学
回复