Neu erkanntes USB-Laufwerk Laufwerksbuchstaben ermitteln
-
Hallo,
ich stelle über MessageHandler fest ob ein USB Gerät(in dem Fall eine Kamera) eingesteckt wird.BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_DEVICECHANGE, Messages::TMessage, wmDevChange); END_MESSAGE_MAP(inherited)
void __fastcall TForm1::wmDevChange(Messages::TMessage msg) { if(msg.WParamLo==7) { ...
Das klappt auch soweit. Das zugewiesenen Laufwerk bekomme ich bisher indem ich von Laufwerksbuchstabe Z bis A alle Laufwerke auf Gerätetyp untersuche
(GetDriveType(DriveName) == DRIVE_REMOVABLE).
Wie kann ich sonst noch an das Laufwerk kommen?
-
öhhm ich glaube das währe besser ein Thema im WINAPI Forum...
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Du musst den WPARAM Parameter auswerten, falls er den Wert DBT_DEVICEARRIVAL hat ist der LPARAM Parameter ein Zeiger auf eine DEV_BROADCAST_HDR Struktur. Die DEV_BROADCAST_HDR Struktur hat ein Attribut dbch_devicetype, wenn dieses Attribut den Wert DBT_DEVTYP_VOLUME hat dann ist der DEV_BROADCAST_HDR Zeiger ein Zeiger auf eine DEV_BROADCAST_VOLUME Struktur. Diese Struktur hat wiederum ein Attribut dbcv_unitmask, dessen erstes gesetztes Bit den Laufwerksbuchstaben des neuen Volumes anzeigt (Bit 0 = A, Bit 1 = B, Bit 2 = C, etc.)
Ungetestet:
void __fastcall Form::OnDeviceChange( TMessage msg ) { char VolumeLetter = ' '; // neues Device erkannt? if( DBT_DEVICEARRIVAL == msg.WParam ) { // ja, Device Typ feststellen DEV_BROADCAST_HDR* pBCH = reinterpret_cast<DEV_BROADCAST_HDR*>( msg.LParam ); if( DBT_DEVTYP_VOLUME == pBCH->dbch_devicetype ) { // Device Typ ist Volume, Laufwerksbuchstaben bestimmen DEV_BROADCAST_VOLUME* pBCV = reinterpret_cast<DEV_BROADCAST_VOLUME*>( pBCH ); for( unsigned int LW = 0; LW < 26; ++LW ) { if( pBCV->dbcv_unitmask & (1 << LW) ) { VolumeLetter = 'A' + LW; break; } } } } }