在我的qt应用程序中,我想将一些应用程序输出数据保存到usb pen驱动器中的文件中。我需要在我的qt应用程序中添加以下功能
有人可以告诉我哪些winapi .lib,.h和.dll文件我可以使用它来获得上述所有功能吗?
如果有人可以提供一些代码段,那对我来说非常有帮助。
答案 0 :(得分:3)
处理WM_DEVICECHANGE
- 有关如何在QT中处理Windows消息,请参阅http://lists.trolltech.com/qt-interest/2001-08/thread00698-0.html。
如果wParam为DBT_DEVICEARRIVAL
,则将lParam强制转换为DEV_BROADCAST_HDR *
如果结构dbch_devicetype
是DBT_DEVTYP_VOLUME
再次施放lParam,这次是DEV_BROADCAST_VOLUME *
现在检查dbcv_unitmask
位字段,迭代位0..31并检查相应的驱动器是否与USB驱动器匹配。
if (wParam == DBT_DEVICEARRIVAL) {
if (((DEV_BROADCAST_HDR *) lParam)->dbch_devicetype == DBT_DEVTYP_VOLUME) {
DWORD Mask = ((DEV_BROADCAST_VOLUME *) lParam)->dbcv_unitmask;
for (int i = 0; i < 32; ++i) {
if (Mask & (1 << i)) {
char RootPath[4] = "A:\\";
RootPath[0] += i;
// Check if the root path in RootPath is your USB drive.
}
}
}
}
答案 1 :(得分:2)
早期的答案现在已经过时了。以下内容适用于Windows 10上的QT5,其中MainWindow源自QMainWindow:
#include <QByteArray>
#include <windows.h>
#include <dbt.h>
bool MainWindow::nativeEvent(const QByteArray& eventType, void* pMessage, long* pResult)
{
auto pWindowsMessage = static_cast<MSG*>(pMessage);
auto wParam = pWindowsMessage->wParam;
if (wParam == DBT_DEVICEARRIVAL || wParam == DBT_DEVICEREMOVECOMPLETE) {
auto lParam = pWindowsMessage->lParam;
auto deviceType = reinterpret_cast<DEV_BROADCAST_HDR*>(lParam)->dbch_devicetype;
if (deviceType == DBT_DEVTYP_VOLUME) {
auto unitmask = reinterpret_cast<DEV_BROADCAST_VOLUME*>(lParam)->dbcv_unitmask;
for (int i = 0; i < 32; ++i) {
if ((unitmask & (1 << i)) != 0) {
setDriveChanged('A' + i, wParam == DBT_DEVICEARRIVAL);
}
}
}
}
return false;
}