新しいUSBデバイスが接続または切断されたときに通知を受けたい(デバイスhid)。私は、USBデバイスの変更があったときに通知を受けることに成功しましたが、デバイスが接続されているか切断されているかわかりません。 (USBは着脱時に)私が受け取るメッセージは同じです: メッセージ:537(VM_DEVICECHANGE) のwParam:7 のlParam:0新しいusbデバイスがQtに接続/切断されました
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QAbstractEventDispatcher>
#include <QAbstractNativeEventFilter>
#include <QDebug>
#include <windows.h>
#include <dbt.h>
#include <QObject>
class MyNativeEventFilter : public QAbstractNativeEventFilter {
public :
virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result)
Q_DECL_OVERRIDE
{
if (eventType == "windows_generic_MSG")
{
MSG *msg = static_cast<MSG *>(message);
static int i = 0;
msg = (MSG*)message;
qDebug() << "message: " << msg->message << " wParam: " << msg->wParam
<< " lParam: " << msg->lParam;
if (msg->message == WM_DEVICECHANGE)
{
qDebug() << "WM_DEVICECHANGE";
}
}
return false;
}
};
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
MyNativeEventFilter myEventfilter;
app.eventDispatcher()->installNativeEventFilter(&myEventfilter);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
Offtopic:なぜあなたはカスタムウィンドウが必要なのでしょうか?単に 'qApp-> eventDispatcher() - > installNativeEventFilter(yourEventFilter);'を使用してください。 'yourEventFilter'は' QAbstractNativeEventFilter'の子でなければなりません –
@DmitrySazonovトリックをありがとうございますが、私はいつも同じ問題を抱えています(私の投稿を編集しました) – helene