Results 1 to 4 of 4

Thread: Catching WM_HOTKEY events

  1. #1
    Join Date
    Oct 2014
    Posts
    2
    Qt products
    Qt4

    Default 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. 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?

  2. #2
    Join Date
    Jan 2006
    Location
    Graz, Austria
    Posts
    8,416
    Thanks
    37
    Thanked 1,544 Times in 1,494 Posts
    Qt products
    Qt3 Qt4 Qt5
    Platforms
    Unix/X11 Windows

    Default Re: Catching WM_HOTKEY events

    Since you are using Qt4, maybe overwriting QCoreApplication::winEventFilter()?

    Cheers,
    _

  3. #3
    Join Date
    Oct 2014
    Posts
    2
    Qt products
    Qt4

    Default Re: Catching WM_HOTKEY events

    Thanks, but unfortunately this doesn't work. I can override winEventFilter and print the contents of the MSG events, but such an event is never raised for a WM_HOTKEY event when I press a hotkey from outside the application, the way it is for the method in the link in my first post. (Also, in a well-known bug, PySide's MSG struct is actually broken; you can't access wParam directly, it's only printed when you print the MSG object directly, but that's irrelevant.)

  4. #4
    Join Date
    Jan 2006
    Location
    Graz, Austria
    Posts
    8,416
    Thanks
    37
    Thanked 1,544 Times in 1,494 Posts
    Qt products
    Qt3 Qt4 Qt5
    Platforms
    Unix/X11 Windows

    Default Re: Catching WM_HOTKEY events

    Then your options are to ask the PySide developers to add the missing functionality and/or fix the broken parts or use PyQt which you already know to work.

    The latter seems to be the more viable choice.

    Cheers,
    _

Similar Threads

  1. QTabWidget - Catching move events
    By RobC in forum Qt Programming
    Replies: 9
    Last Post: 9th March 2012, 23:01
  2. [Qt Widget + libvlc] catching mouse events
    By mentalmushroom in forum Qt Programming
    Replies: 9
    Last Post: 6th March 2012, 13:39
  3. Catching Mouse Events on Top-Level Window
    By andyp in forum Qt Programming
    Replies: 6
    Last Post: 8th September 2009, 10:26
  4. Problem with catching keyPress events ?
    By arbi in forum Qt Programming
    Replies: 12
    Last Post: 1st September 2008, 12:35
  5. Catching X Events
    By nupul in forum Qt Programming
    Replies: 3
    Last Post: 16th April 2006, 12:43

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.