当前位置:   article > 正文

C++ Qt实现拦截自身键盘事件_qt linux 霸屏屏蔽键盘

qt linux 霸屏屏蔽键盘
  1. #include <QCoreApplication>
  2. #include <QDebug>
  3. #include <QAbstractNativeEventFilter>
  4. #include <QKeyEvent>
  5. #ifdef Q_OS_WIN
  6. #include <qt_windows.h>
  7. #elif defined(Q_OS_LINUX)
  8. #include <X11/Xlib.h>
  9. #include <X11/Xutil.h>
  10. #endif
  11. class KeyboardInterceptor : public QAbstractNativeEventFilter
  12. {
  13. public:
  14. bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) override
  15. {
  16. Q_UNUSED(eventType);
  17. Q_UNUSED(result);
  18. if (eventType == "windows_generic_MSG" && message != nullptr)
  19. {
  20. MSG *msg = static_cast<MSG *>(message);
  21. if (msg->message == WM_KEYDOWN || msg->message == WM_SYSKEYDOWN)
  22. {
  23. // 拦截按下事件
  24. qDebug() << "Key down - VK code: " << msg->wParam;
  25. return true; // 返回true以拦截事件
  26. }
  27. else if (msg->message == WM_KEYUP || msg->message == WM_SYSKEYUP)
  28. {
  29. // 拦截释放事件
  30. qDebug() << "Key up - VK code: " << msg->wParam;
  31. return true; // 返回true以拦截事件
  32. }
  33. }
  34. #ifdef Q_OS_LINUX
  35. // 在Linux上拦截键盘事件
  36. if (eventType == "xcb_generic_event_t" && message != nullptr)
  37. {
  38. xcb_generic_event_t *ev = static_cast<xcb_generic_event_t *>(message);
  39. if (ev->response_type & XCB_EVENT_MASK_KEY_PRESS)
  40. {
  41. xcb_key_press_event_t *keyEvent = static_cast<xcb_key_press_event_t *>(message);
  42. // 拦截按下事件
  43. qDebug() << "Key down - Key code: " << keyEvent->detail;
  44. return true; // 返回true以拦截事件
  45. }
  46. else if (ev->response_type & XCB_EVENT_MASK_KEY_RELEASE)
  47. {
  48. xcb_key_release_event_t *keyEvent = static_cast<xcb_key_release_event_t *>(message);
  49. // 拦截释放事件
  50. qDebug() << "Key up - Key code: " << keyEvent->detail;
  51. return true; // 返回true以拦截事件
  52. }
  53. }
  54. #endif
  55. return false; // 返回false以继续处理事件
  56. }
  57. };
  58. int main(int argc, char *argv[])
  59. {
  60. QCoreApplication app(argc, argv);
  61. KeyboardInterceptor interceptor;
  62. app.installNativeEventFilter(&interceptor);
  63. return app.exec();
  64. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/430084
推荐阅读
相关标签
  

闽ICP备14008679号