> Date: Mon, 23 Jan 2012 08:24:41 -0500 > From: d...@davea.name > To: neruy...@hotmail.com > CC: python-list@python.org > Subject: Re: PyHook to catch mouse events > > On 01/23/2012 07:06 AM, Neru Yume wrote: > > Using PyHook to record mouse events, one has to add quite a few lines to > > set up a hook, and as far as I have experienced, if one uses time.sleep() > > or some other function that spends some time doing something, the program > > freezes my computer completely while doing this (the cursor starts moving > > slowly, and so on). > > > > > > Also: Ctrl+c does not work, I have to click the cross to exit the program, > > which is horrible when combined with the freezing mentioned earlier. > > > > > > Is there a way to avoid the program freezing up? Using the win32api > > somehow, rather than PyHook? (I only know how to generate input with > > win32api, not catch output). > > > > > > import pythoncom, pyHook > > class record(object): > > def OnMouseEvent(self, event): > > print 'MessageName:',event.MessageName > > print 'Message:',event.Message > > print 'Time:',event.Time > > print 'Window:',event.Window > > print 'WindowName:',event.WindowName > > print 'Position:',event.Position > > print 'Wheel:',event.Wheel > > print 'Injected:',event.Injected > > print '---' > > #time.sleep(1) #If I uncomment this, running the program will freeze stuff, > > as mentioned earlier. > > return True > > > > recordit = record() > > hm = pyHook.HookManager() > > hm.MouseAll = recordit.OnMouseEvent > > hm.HookMouse() > > pythoncom.PumpMessages() > > > This is the nature of event-driven systems. When you hook into the > Windows system, you're expected to carve your event handlers into > something quick. For normal Python gui programming, breaking the rule > will only affect your own program. Pyhook just does the same thing on a > system-wide scale. > > > Are you sure you need global events at all? > > If you want to do useful work in response to particular global mouse > events, you'll have to arrange to get control some other way. Normally > this is done by posting pseudo-events in your process's message queue, > so you'll get control again, and can continue working on the problem. I > don't know the specific details for pyhook, since I don't run Windows > any more, and pyhook is not part of Python itself. > > > -- > > DaveA >
I do need global events, yes - I am not using any particular GUIs at the moment but rather trying to record mouse paths (not limited to one window). Not very familiar with message queues of processes.
-- http://mail.python.org/mailman/listinfo/python-list