Qt World Summit: Submit your Presentation

Catching WM_HOTKEY events

  • Hi, first I should specify that I'm using PySide on Windows. I'm rigging together a custom global hotkey solution (there aren't many existing libraries that have support for global hotkeys) on Win32, which is pretty easy to do. I already have it so that Windows sends my application a standard WM_HOTKEY event (message ID=786). I've tried a few ways of catching this event. The first way, which actually worked when using PyQt4, was using QAbstractEventDispatcher with setEventFilter, as exemplified "here":http://www.riverbankcomputing.com/pipermail/pyqt/2011-March/029449.html. When message.message is 786, access message.wParam to get the details of which global hotkey was pressed. Success!

    However, PySide for some reason does not have a setEventFilter function, so I went looking for other solutions. Installing an event filter on my main window failed, it never gets any messages at all at the point in time at which I press the hotkey (although it does get messages when any non-global-hotkey keys are pressed).

    I also failed to create a custom event loop. I can create a loop to call app.processEvents() instead of using app.exec() directly, but what I really need is an infinite loop to catch Win32 events using GetMessage(), which doesn't really work with my existing loop.

    Right now, I'm out of ideas. If only PySide had setEventFilter support... What do you think? Is there some way to catch the WM_HOTKEY event?

Log in to reply