Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Sense Mouse Movement?

by toolsmith (Initiate)
on Feb 18, 2009 at 18:07 UTC ( #744833=perlquestion: print w/replies, xml ) Need Help??

toolsmith has asked for the wisdom of the Perl Monks concerning the following question:

In the Windows environment, I want to write a script that will just idle along in the background noticing if keys are pressed and/or mouse is moved. I'll use this knowledge to record working hours. Looks like I can use Term::ReadKey to check for keyboard input, but I haven't found anything to tell me if the mouse has moved. Is there something? Thanks - Peter

Replies are listed 'Best First'.
Re: Sense Mouse Movement?
by Gavin (Bishop) on Feb 18, 2009 at 19:14 UTC

    "I haven't found anything to tell me if the mouse has moved"

    Perhaps Tk::MouseGesture could be modified to suit your needs.

Re: Sense Mouse Movement?
by zentara (Archbishop) on Feb 18, 2009 at 19:12 UTC
    I'm in a linux environment, but the idea is the same. Keyboard focus and mouse focus is neccessarily connected only to a window that is opened via a program. How else could your applications know which of them is supposed to be responding to the current mouse/key events? I really doubt that Term::ReadKey will capture all keyboard activity in ALL applications, without a global grab(which would interfere with normal operations).

    When you want to intercept all mouse/key events, regardless of where( in which application) the focus is; you need to go down to the kernel level, and put in hooks that just tee off to files any mouse/keyboard events at the device level.

    Perl will not do this for you, but on Windows, Employee Loggers are widely available so that your boss can watch all your moves. Just google for "employee logger keyboard mouse snooper Windows". Doing that essentially puts a spy virus into your computer, and I suspect it is why many employers prefer MSWindows, because it makes spying on all employees easy.

    Linux has a kernel patch to do it also, but it dosn't come included as standard, as on MSWindows. :-)

    Write to WIndows Event Log may yield some clues.

    I'm not really a human, but I play one on earth My Petition to the Great Cosmic Conciousness
Re: Sense Mouse Movement?
by lodin (Hermit) on Feb 20, 2009 at 01:45 UTC

    BrowserUK provides a fully working example in Re^3: Win32 idle state (Updated), using Win32::API (or rather Win32::API::Prototype, but see my reply) to check when windows last registered any user input. If you need to know the current tick count you can use GetTickCount() in the Win32 module. Be aware of that the tick count wraps when it becomes too large, so you probably want check against that if you computer runs for more than 49 days.


Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://744833]
Approved by atemon
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (2)
As of 2022-05-23 03:11 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (81 votes). Check out past polls.