#!/usr/bin/perl use warnings; use strict; use Tk; my $mw = MainWindow->new; # the window must be mapped for a global grab # so make a 1 pixel window in lower right corner # for invisible grabs $mw->geometry('200x200+50+50'); $mw->overrideredirect(1); $mw->bind("", [ \&process_key_press , Ev('K') ] ); $mw->bind("", [ \&process_key_release , Ev('K') ] ); $mw->Label(-text=>"Press escape to exit")->pack(); $mw->after(100,sub{$mw->grabGlobal;}); $mw->focusForce; MainLoop; sub process_key_press{ my ($caller, $key) = @_; print "Press $key\n"; if ($key eq 'Escape'){exit} } sub process_key_release{ my ($caller, $key) = @_; print "Release $key\n"; }