我的代码怎么了?带有QT的原始输入API
What is wrong with my code? Raw Input API with Qt
我正在尝试使用QT的原始输入API,以便我可以记录键盘事件和鼠标事件。但是,此代码没有成功。我也是原始输入API的初学者。
我尝试使用调试器,发现WM_Input未执行。QT有问题吗?
,也是我的mainwin冻结。
main.cpp
#include <QApplication>
#include "MainWin.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWin mainw;
mainw.show();
RAWINPUTDEVICE rid[2];
rid[0].usUsagePage = 0x01;
rid[0].usUsage = 0x02;
rid[0].dwFlags = RIDEV_NOLEGACY;
rid[0].hwndTarget = 0;
rid[1].usUsagePage = 0x01;
rid[1].usUsage = 0x06;
rid[1].dwFlags = RIDEV_NOLEGACY;
rid[1].hwndTarget = 0;
if (RegisterRawInputDevices(rid, 2, sizeof(RAWINPUTDEVICE)) == false)
exit(-1);
return a.exec();
}
mainwin.cpp
#include "MainWin.h"
MainWin::MainWin()
{
}
MainWin::~MainWin()
{
}
bool MainWin::nativeEventF(const QByteArray & eventType, void * message, long * result)
{
MSG * msg = (MSG*)message;
switch (msg->message)
{
case WM_INPUT:
qDebug() << "in";
break;
}
return false;
}
我的实施中是否有问题?
您将RAWINPUTDEVICE::hwndTarget
字段设置为0,因此您没有给原始输入API一个特定的HWND
将WM_INPUT
消息发送到。根据文档:
hwndTarget
类型:hwnd
目标窗口的手柄。如果
NULL
,则遵循键盘焦点。
您的QT窗口是否会获得键盘焦点?如果没有,您将不会接收任何WM_INPUT
消息。
通常最好为hwndTarget
提供特定的HWND
,例如:
rid[index].hwndTarget = reinterpret_cast<HWND>(mainw.WinId());
如果您需要在HWND
没有键盘焦点时接收消息,请使用RIDEV_INPUTSINK
标志:
rid[index].dwFlags = ... | RIDEV_INPUTSINK;
相关文章:
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 如何重复使用原始输入缓冲区内存?
- 鼠标跟踪的原始输入始终返回 0 作为增量值
- #defined 函数只能接受原始输入而不接受变量?
- Zlib 放气输入大于原始输入字符串的字符
- TensorFlow模型:如何从原始爱好文件中识别输入/输出节点名称
- 在原始输入之后,我不断得到零
- 我的代码怎么了?带有QT的原始输入API
- X和Y坐标来自带有原始输入的Precision触摸板
- Windows C - 需要想法 - 在同一应用/窗口中将鼠标输入和原始输入组合在一起
- C++ 重载运算符>>(输入)不会更改原始运算符
- 如何模拟原始输入/以正确的方式向应用程序发送WM_INPUT消息
- 如何在OpenSceneGraph中使用windows原始输入
- 将原始输入值打印到屏幕
- 以非阻塞方式读取Linux中的原始输入
- 多个原始输入窗口接收器
- 使用原始输入同时获取两个鼠标的数据
- C++-WINAPI-缺少原始输入特定的函数和结构
- UWP中的鼠标和键盘挂钩:原始输入VS KeyEvents VS全局挂钩
- 在Windows上模拟原始输入