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 |