Hi All,
I am trying to get a USb insertion and removal event in a non-GUI class but with much success. I am not able to get the arrival and removal events. Can anyone lend some pointers. My code looks like -
Usbdetection.h
============
#ifndef USBDETECTION_H
#define USBDETECTION_H
#include <QAbstractNativeEventFilter>
#include <QProcess>
#include <QMap>
class UsbDetection : public QAbstractNativeEventFilter
{
public:
UsbDetection();
virtual bool nativeEventFilter
(const QByteArray &eventType,
void *message,
long *) Q_DECL_OVERRIDE;
};
#endif // USBDETECTION_H
#ifndef USBDETECTION_H
#define USBDETECTION_H
#include <QAbstractNativeEventFilter>
#include <QProcess>
#include <QMap>
class UsbDetection : public QAbstractNativeEventFilter
{
public:
UsbDetection();
virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE;
};
#endif // USBDETECTION_H
To copy to clipboard, switch view to plain text mode
UsbDetection.cpp
=============
#include <QByteArray>
#include <windows.h>
#include <dbt.h>
#include "UsbDetection.h"
#include <QDebug>
#include <QDir>
UsbDetection::UsbDetection()
: QAbstractNativeEventFilter()
/*, mWmicProcess(new QProcess())
, mIsDevInsertion(FALSE)
, mDriveToDevNameMap(new QMap<QString, TDriveToMediaPair>())*/
{
qDebug() << "In constructor()";
}
bool UsbDetection
::nativeEventFilter(const QByteArray &eventType,
void *pMessage,
long* pResult
) //Q_DECL_OVERRIDE {
qDebug() << " In native events" ;
Q_UNUSED(eventType);
Q_UNUSED(pResult);
auto pWindowsMessage = static_cast<MSG*>(pMessage);
auto wParam = pWindowsMessage->wParam;
qDebug() << "wParam = " << wParam;
if (wParam == DBT_DEVICEARRIVAL || wParam == DBT_DEVICEREMOVECOMPLETE) {
qDebug() << "USB plug/unplug = " << wParam;
....................
}
return true;
}
#include <QByteArray>
#include <windows.h>
#include <dbt.h>
#include "UsbDetection.h"
#include <QDebug>
#include <QDir>
UsbDetection::UsbDetection()
: QAbstractNativeEventFilter()
/*, mWmicProcess(new QProcess())
, mIsDevInsertion(FALSE)
, mDriveToDevNameMap(new QMap<QString, TDriveToMediaPair>())*/
{
qDebug() << "In constructor()";
}
bool UsbDetection::nativeEventFilter(const QByteArray &eventType, void *pMessage, long* pResult) //Q_DECL_OVERRIDE
{
qDebug() << " In native events" ;
Q_UNUSED(eventType);
Q_UNUSED(pResult);
auto pWindowsMessage = static_cast<MSG*>(pMessage);
auto wParam = pWindowsMessage->wParam;
qDebug() << "wParam = " << wParam;
if (wParam == DBT_DEVICEARRIVAL || wParam == DBT_DEVICEREMOVECOMPLETE) {
qDebug() << "USB plug/unplug = " << wParam;
....................
}
return true;
}
To copy to clipboard, switch view to plain text mode
main.cpp
========
#include <QApplication>
#include <QDebug>
#include <QDir>
#include <QAbstractEventDispatcher>
#include "UsbDetection.h"
int main(int argc, char *argv[])
{
UsbDetection UsbDetection;
app.installNativeEventFilter(&UsbDetection);
return app.exec();
}
#include <QApplication>
#include <QDebug>
#include <QDir>
#include <QAbstractEventDispatcher>
#include "UsbDetection.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
UsbDetection UsbDetection;
app.installNativeEventFilter(&UsbDetection);
return app.exec();
}
To copy to clipboard, switch view to plain text mode
Output :
=======
In constructor()
In native events
wParam = 0
In native events
wParam = 0
In native events
wParam = 0
In native events
wParam = 0
Bookmarks