-
Notifications
You must be signed in to change notification settings - Fork 6
Screenshot
This is a simple application that captures full screen and application window images. It adds a few extra features to make it even more useful.
Imager::Screenshot, File::Copy, and a few external X11 tools: - xprop (included by default in Ubuntu) and xclip (needed sudo apt-get install xclip
to install, adds clipboard functionality).
A couple of ways to get window Ids on X11, of which xprop comes already installed in Ubuntu.
my $windowList= `xprop -root|grep ^_NET_CLIENT_LIST`;
my @winIds=$windowList=~m/(0x[0-9a-f]{7})/g;
xprop also gives us a way of getting the names of the windows
my $name=`xprop -id $id|grep '^WM_NAME(STRING)'`;
$name=~s/WM_NAME\(STRING\) =//;
$name=~s/\"//g;
chomp $name;
Imager::Screenshot takes, would you believe, screenshots. Passed with a window ID it will capture the contents of the frame. If we know the window Ids of all the windows we could create a hash containing all the screens. While it is possible to include window decorations with the Winodws variant of Imager, this appears not to be possible for Linux. Nevermind...the code is simple.: -
my %images=map($id => screenshot(hex $_) @winIds ;
In practice this takes a while if there are are many windows. Better to to these as and when needed.
Now I know there is a module called Clipboard. I presume this uses xclip, itself, and as I know there is only one line that needs it, it is easier to install just xclip and : -
system("xclip -selection clipboard -t image/png -i $workingDir.$workingFile ");
The code is available in the Examples folder here