Advertisement
Guest User

在 Linux 下对指定窗口录屏并以图片格式保存到screenshots目录下

a guest
Dec 13th, 2012
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement