Catching keystrokes under Windows

Michael Geary Mike at DeleteThis.Geary.com
Wed Nov 19 15:09:26 EST 2003


Olli Piepponen:
> I'm having a little problem catching keystrokes under Windows.
> I did a little research and found that with mscvrt.getch() one
> can cath a single key that is pressed. However this doesn't work
> when the program is run on the backround and not as the
> primary task. What I would like to have is a same sort of
> function that would also work when the program is being run
> on the background. I'm trying to implement a program that
> would listen for a certain key to be pressed and then start a
> timer that would *beep* after 30 seconds or so. I've
> everything else sorted out except how to catch the one key.
>
> So is there an easy way like msvcrt.getch() is or does one have
> to start playing with the win32api module? If the
> win32api-module is needed for this task could you also explain
> how? Python is my first real programming language so I don't
> understand too much about C\C++ stuff. Examples would be
> highly appreciated.

To do this for all Windows applications, you need to use a systemwide
message hook, which is set with the Windows function SetWindowsHookEx using
the WH_KEYBOARD option. The hook code must be in a DLL (dynamic link
library) and should be written in a language like C or C++.

This is a fairly advanced bit of Windows programming, and you wouldn't want
to tackle it without some prior experience in both Windows and C/C++.
However, Pete Parente wrote a DLL that does this keystroke interception and
calls back to Python code to handle the keystrokes. I haven't looked at
Pete's code yet, but you can find it here:

http://sourceforge.net/projects/uncassist

pyHook is what you're looking for on that page. Below is Pete's original
message with some more information.

Hope that helps,

Mike

"Peter Parente" <parente at cs.unc.edu> wrote in message
news:85b6a599.0308250326.15d20640 at posting.google.com...
> Change of plans. The hooks library is at
> http://www.sourceforge.net/projects/uncassist. You can download and
> run the pyHook windows installer, or check it out of CVS. There's an
> example.py file in the CVS pyHook module that shows you how to use it
> (requires wxPython for the GUI).
>
> Pete
>
> parente at cs.unc.edu (Peter Parente) wrote in message
news:<85b6a599.0308230628.49ba3c74 at posting.google.com>...
> > I have a Python library that can capture system wide keystrokes and
> > mouse events. Basically, the windows hooking code is in a C Python
> > extension that passes callback information back to Python when an
> > event occurs. I'll
> > post it to our Python tools sourceforge site in the near future. (I
> > need to clean it up a bit and provide an example before it will be the
> > least bit useful to you.)
> >
> > When it's posted, it will appear at
> > http://sourceforge.net/projects/uncpythontools/ as the pyHook project.
> >
> > Pete
> >
> >
> > hokieghal99 <hokiegal99 at hotmail.com> wrote in message
news:<bi66lq$skj$1 at solaris.cc.vt.edu>...
> > > Does anyone know of a keystroke logger that has been written in Python
> > > for Windows machines? I'd like to see such a script and use it as a
> > > point of reference for a real-time backup project that I'm working on.
> > > Basically, I'd like to be able to capture all keystrokes from the
> > > keyboard buffer and write them to a text file so I could reporduce
> > > emails, documents, etc. in the event of file loss that occurs between
> > > nightly backups. For example, my boss comes to me, he has deleted an
> > > email that he was writing... he has been working on the email all
day...
> > > and he expects me to wave a magic wand and bring it back.
> > >
> > > Thanks for any advice, code or pointers. Also, if Python isn't suited
> > > for this, let me know and I'll look at doing this in c






More information about the Python-list mailing list