我相信您可能缺少的是注册设备通知的电话。这是我用来做同样事情的代码,尽管我重写了 QWidget 类的 winEvent() 方法而不是 winEventFilter。
// Register for device connect notification
DEV_BROADCAST_DEVICEINTERFACE devInt;
ZeroMemory( &devInt, sizeof(devInt) );
devInt.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
devInt.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
devInt.dbcc_classguid = GUID_DEVINTERFACE_VOLUME;
m_hDeviceNotify =
RegisterDeviceNotification( winId(), &devInt, DEVICE_NOTIFY_WINDOW_HANDLE );
if(m_hDeviceNotify == NULL)
{
qDebug() << "Failed to register device notification";
} // end if
注意:您很可能需要更改 的值DEV_BROADCAST_DEVICEINTERFACE
以满足您的需要。
编辑:要使用此代码,您需要包含正确的头文件并执行正确的设置。 DEV_BROADCAST_DEVICEINTERFACE
需要包含 Dbt.h 标头。此外,此代码的重点是 RegisterDeviceNotification 函数。信息可在MSDN上找到