Как по букве диска узнать, соответствует он дискете или флешке, причём не "хрюкая" дисководом (в случае, если это дискета)? GetDriveType в обоих случаях возвращает DRIVE_REMOVABLE. Для каких-нибудь попыток DeviceIoControl нужно сначала открыть устройство \\.\X:, а это уже обращение к носителю (а также это не будет работать под 9x - в принципе, это не критично, но хотелось бы для 9x тоже работающий метод).
twgt GetDiskFreeSpace как вариант Захрюкает, а если не обернуть SetErrorMode(SEM_FAILCRITICALERRORS), то и окошко вылезет.
посмотреть ссылку в каталоге объектов. Все диски - символьные ссылки. У флешки обычно это будет вида \??\F: ссылается у меня на \Device\Harddisk1\DP(1)0-0+17 Делается через QueryDosDevice Сетевые диски обычн задаются в \Sessions\X\DosDevices\Y: => \Device\LanmanRedirector\...... Короче я когда то писал получение списка флешек и составления бинарной маски (аналогично GetLogicalDrives): Код (Text): BOOLEAN StringCheckMask( LPSTR input, LPSTR mask ) { int inlen = lstrlen(input); if( inlen < lstrlen(mask) ) return FALSE; for( int i=0; i<inlen; i++ ) { if( !( (mask[i] == input[i]) || (mask[i] == '?') ) ) return FALSE; } return TRUE; } ULONG RemoveableDrives = 0; VOID ConstructRemoveableDisksList( ) { static char removeable_media_mask[] = "\\Device\\Harddisk?\\DP(?)?-?+??"; char drive[] = "A:"; ULONG LogicalDrives = GetLogicalDrives( ); for( ; drive[0]<='Z'; drive[0]++ ) { if( LogicalDrives & (1 << (drive[0]-'A')) ) { char buff[1024]; QueryDosDevice( drive, buff, 1024 ); if( StringCheckMask( buff, removeable_media_mask ) ) { RemoveableDrives |= (1 << (drive[0]-'A')); } } } }
CyberManiac я не продвинутый и не думаю даже о существовании usb-дисководов я правда думал о старых шлейфовых приводах.
twgt, даже древних дисководов может быть целых три. У меня в старом компьютере что-то было в настройках BIOS на эту тему.
Оказалось, что под XP это работает, а под Vista - уже нет. В Vista флешки тоже раскрываются в \Device\HarddiskVolumeN. Ещё варианты?
Хм... можно проверять начало строки на соответствие \Device\Harddisk, а от жёсткого диска отличать с помощью GetDriveType. Но неужели explorer и стандартный диалог GetOpenFileName извращаются через QueryDosDevice?
ну посмотри в иде как оно реализовано там, хз.. либа, отвечающая за собственно шелл - это вроде shell32 и browseui. открывай последнюю в иде и посмотри как она список дисков получает. хотя бы по импорту можно, наверное, догадаться.