Всегда ли диски A и B - дискета, или проблемы с GetDriveType

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Всегда ли диски A и B - дискета, или проблемы с GetDriveType

Сообщение Pantalone » 14.11.2005 (Пн) 22:23

Флоповод у нас вроде определяется как REMOVABLE, но как определить что он дисковод, а не какой-нибудь флеш-диск или что там еще можно повесить на A или B? Какую иконку присваивать?

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 14.11.2005 (Пн) 23:13

А почему бы не брать стандартную виндозную иконку?
Имхо так лучше.
http://bbs.vbstreets.ru/viewtopic.php?p=79213#79213 - примерчик
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 15.11.2005 (Вт) 0:44

Я храню состояние системы, при следующей загрузке какого-то диска может не быть, где я его картинку возьму? Выдрать иконку и хранить в спецпапке? Не, а если иконки юзер поменяет системные это такое попугайство и шапито будет в обозначении дисков, лучше стандартные иконки. Главное определить что это флоппи, а не что-то там другое.

Zoomie
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 181
Зарегистрирован: 10.05.2004 (Пн) 10:07
Откуда: СПб

Сообщение Zoomie » 15.11.2005 (Вт) 2:14

Я думаю на A или B можно повесить только флопик...

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 15.11.2005 (Вт) 14:40

Zoomie
К сожалению нет, можно повесить что угодно, вчера убедился.
Да, труба...
Как же определить флопик это или что-то другое?

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 15.11.2005 (Вт) 14:41

Код: Выделить всё
SUBST
Associates a path with a drive letter.

SUBST [drive1: [drive2:]path]
SUBST drive1: /D

  drive1:        Specifies a virtual drive to which you want to assign a path.
  [drive2:]path  Specifies a physical drive and path you want to assign to
                 a virtual drive.
  /D             Deletes a substituted (virtual) drive.

Type SUBST with no parameters to display a list of current virtual drives.

AndreyIl
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 18.10.2005 (Вт) 16:17
Откуда: г. Брянск

Всегда ли диски A и B - дискета, или проблемы с GetDriveType

Сообщение AndreyIl » 15.11.2005 (Вт) 15:45

DriveType=Removable
IsReady=False

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 15.11.2005 (Вт) 15:46

Ennor
Вообще-то вопрос как программно понять флопик это или нет, а не как повесить на его букву другой диск.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 15.11.2005 (Вт) 15:47

AndreyIl
А если IsReady=True?

AndreyIl
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 18.10.2005 (Вт) 16:17
Откуда: г. Брянск

Всегда ли диски A и B - дискета, или проблемы с GetDriveType

Сообщение AndreyIl » 15.11.2005 (Вт) 15:49

IsReady=True, если вставлена дискета. Для других дисков IsReady=False

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 15.11.2005 (Вт) 15:59

Ну вставлена дискета, как определить что это флопик, а не флешка?
Или хочешь сказать что все Removable кроме флопа всегда IsReady=False?

AndreyIl
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 18.10.2005 (Вт) 16:17
Откуда: г. Брянск

Сообщение AndreyIl » 15.11.2005 (Вт) 16:06

Для флопа IsReady=False, если нет дискеты. Для флэшки IsReaady=True, т.к. есть доступ к носителю. Если вставлена дискета, то TotalSize=1457664.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 15.11.2005 (Вт) 16:42

На другом форуме вы говорите что IsReaady=True бывает толкьо для дискетки, а теперь оказывается еще и для флешки. TotalSize еще ни о чем не говорит. Есть внятный алгоритм определения что у нас флопик с данными, а не флешка?

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 15.11.2005 (Вт) 16:48


AndreyIl
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 18.10.2005 (Вт) 16:17
Откуда: г. Брянск

Сообщение AndreyIl » 15.11.2005 (Вт) 16:52

Вот пример на VBScript

Dim Sc As FileSystemObject
Set Sc = CreateObject("Scripting.FileSystemObject")
MsgBox Sc.Drives("A").IsReady
MsgBox Sc.DriveExists("A")
MsgBox Sc.Drives("A").TotalSize


Sc.DriveExists("A")=Sc.Drives("A").IsReady (одно и то же)

Что касается IsReady=True, читайте внимательнее предыдущие сообщения.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 15.11.2005 (Вт) 17:15

Все это не то.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.11.2005 (Ср) 8:24

А чем DeviceIOControl не подходит?
Lasciate ogni speranza, voi ch'entrate.

AndreyIl
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 18.10.2005 (Вт) 16:17
Откуда: г. Брянск

Сообщение AndreyIl » 16.11.2005 (Ср) 11:32

Такой метод пойдет?

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk", , 48)
For Each objItem In colItems
If objItem.Description = "Дисковод 3,5 дюйма" Then
MsgBox "Access: " & objItem.Access
MsgBox "Availability: " & objItem.Availability
MsgBox "BlockSize: " & objItem.BlockSize
MsgBox "Caption: " & objItem.Caption
MsgBox "Compressed: " & objItem.Compressed
MsgBox "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode
MsgBox "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig
MsgBox "CreationClassName: " & objItem.CreationClassName
MsgBox "Description: " & objItem.Description
MsgBox "DeviceID: " & objItem.DeviceID
MsgBox "DriveType: " & objItem.DriveType
MsgBox "ErrorCleared: " & objItem.ErrorCleared
MsgBox "ErrorDescription: " & objItem.ErrorDescription
MsgBox "ErrorMethodology: " & objItem.ErrorMethodology
MsgBox "FileSystem: " & objItem.FileSystem
MsgBox "FreeSpace: " & objItem.FreeSpace
MsgBox "InstallDate: " & objItem.InstallDate
MsgBox "LastErrorCode: " & objItem.LastErrorCode
MsgBox "MaximumComponentLength: " & objItem.MaximumComponentLength
MsgBox "MediaType: " & objItem.MediaType
MsgBox "Name: " & objItem.Name
MsgBox "NumberOfBlocks: " & objItem.NumberOfBlocks
MsgBox "PNPDeviceID: " & objItem.PNPDeviceID
MsgBox "PowerManagementCapabilities: " & objItem.PowerManagementCapabilities
MsgBox "PowerManagementSupported: " & objItem.PowerManagementSupported
MsgBox "ProviderName: " & objItem.ProviderName
MsgBox "Purpose: " & objItem.Purpose
MsgBox "Size: " & objItem.Size
MsgBox "Status: " & objItem.Status
MsgBox "StatusInfo: " & objItem.StatusInfo
MsgBox "SupportsFileBasedCompression: " & objItem.SupportsFileBasedCompression
MsgBox "SystemCreationClassName: " & objItem.SystemCreationClassName
MsgBox "SystemName: " & objItem.SystemName
MsgBox "VolumeName: " & objItem.VolumeName
MsgBox "VolumeSerialNumber: " & objItem.VolumeSerialNumber
End If
Next

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 16.11.2005 (Ср) 13:04

Можно и через WMI, только конечно условие поменять надо - а то смешно прям, чесслово.

Ну а лукать, соответственно, в проперти DriveType и MediaType. Как раз то, что нужно.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 16.11.2005 (Ср) 13:04

Да этот способ работает, но одно но, по которому я от него отказался:
работает ли WMI на большинстве машин, не говоря уже о том, что оно просто может отсутствовать?

ЗЫ: с Msgbox это ты здорово придумал :)))


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 94

    TopList