在我的qt應用程序中,我想將一些應用程序輸出數據保存到我的usb筆驅動器中的文件中。我需要把以下功能在我的Qt應用程序在Windows上檢測Qt中的USB通知
- 檢測USB驅動器插入
- 我只有一個USB插槽。
- 我插入後,我想知道它的驅動器號碼和字母,並將我的電腦中特定位置的文件傳輸到該USB驅動器。
有人可以告訴我哪些winapi .lib,.h和.dll文件我可以用來獲得所有上述功能嗎?
如果有人可以提供一些代碼片段,它將對我非常有用。
在我的qt應用程序中,我想將一些應用程序輸出數據保存到我的usb筆驅動器中的文件中。我需要把以下功能在我的Qt應用程序在Windows上檢測Qt中的USB通知
有人可以告訴我哪些winapi .lib,.h和.dll文件我可以用來獲得所有上述功能嗎?
如果有人可以提供一些代碼片段,它將對我非常有用。
Handle 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.
}
}
}
}
較早的答案現在已過時。以下爲我工作與QT5在Windows 10,在主窗口從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;
}
當驅動器插入,也給驅動器盤符這將創建一個事件。檢測「驅動器號」(可能是USB序列號)要複雜得多,也許可以使用卷標或文件系統序列號。 – 2011-02-18 18:05:58