View difference between Paste ID: jXRKMnEX and eSu4njDU
SHOW: | | - or go back to the newest paste.
1
#! /bin/bash
2
3
# from http://www.thinkbase.net
4
5
mkdir screenshot
6
echo "------------------------------------------------------------"
7
8
while :
9
do
10
    echo -ne "请选择需要录制的窗口 ...  \b"
11
12
    # 使用 xwininfo 选择一个窗口并获取其 window id
13
    xwininfo > screenshot/xwininfo.txt
14
    WIN_ID=`cat screenshot/xwininfo.txt | grep "xwininfo: Window id:" | cut -d ' ' -f 4`
15
    WIN_INFO=`xwininfo -id $WIN_ID | grep $WIN_ID`
16
    echo -e "选中的窗口是: \n  -> $WIN_INFO"
17
18
    # 当前需要截取的窗口对应的进程
19
    PID=`xprop -id $WIN_ID | grep "_NET_WM_PID(CARDINAL)" | cut -d ' ' -f 3`
20
21
    while(true); do
22
        read -p "请输入'y'确认, 输入'n'重新选择: " YES_NO
23
        case "$YES_NO" in
24
            [yY]*)
25
                THE_WIN_ID=$WIN_ID
26
                break
27
                ;;
28
            [nN]*)
29
                THE_WIN_ID="invalid"
30
                break
31
                ;;
32
            *)
33
                echo "输入($YES_NO)无效, 必须是 y 或者 n"
34
                ;;
35
        esac
36
    done
37
38
    if [ "$THE_WIN_ID" != "invalid" ]; then
39
        break
40
    fi
41
done
42
43
PRE_FILE="not-exist"
44
45
while(true);do
46
    # 获取当前活动窗口的 window id
47
    ACTIVE_WIN_ID=`xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| cut -d ' ' -f 5`
48
    # 获取当前活动窗口的 PID
49
    ACTIVE_PID=`xprop -id $ACTIVE_WIN_ID | grep "_NET_WM_PID(CARDINAL)" | cut -d ' ' -f 3`
50
51
    FILE_NAME=`date +%Y%m%d-%H%M%S`
52
    if [ "$ACTIVE_PID" == "$PID" ] ; then
53
        echo -ne "* \b"
54
        # 如果活动窗口属于当前进程, 截取活动窗口, 同时使用 -screen 参数, 以便保证界面上的菜单以及工具提示能够被正常截取下来
55
        import -window $ACTIVE_WIN_ID -screen -frame screenshot/$FILE_NAME.png
56
    else
57
        echo -ne ". \b"
58
        # 如果活动窗口不属于当前进程, 则截取所选择的窗口, 同时不使用 -screen 参数, 避免截取到其他窗口的内容
59
        import -window $THE_WIN_ID -frame screenshot/$FILE_NAME.png
60
    fi
61
62
    # 和前面截取的文件内容进行比较, 如果没有区别, 则只保留一个文件(减少长时间"发呆"产生大量相同的截图)
63
    cmp -s screenshot/$FILE_NAME.png screenshot/$PRE_FILE.png
64
    if [ $? == 0 ] ; then
65
        echo -ne " [X]$PRE_FILE  \b"
66
        rm -f screenshot/$PRE_FILE.png
67
    fi
68
69
    PRE_FILE=$FILE_NAME
70
71
    sleep 1
72
done