Страница: 1 | 2 |
Вопрос: буква CD-rom
Добавлено: 02.07.04 18:04
Автор вопроса: Ragnasaur
Подскажите как можно программно определить букву CD-rom и в дальнейшем использовать её для открытия папки на CD.
Что делать, если дисководов много.
Ответы
Всего ответов: 28
Номер ответа: 1
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #1
Добавлено: 02.07.04 18:17
Можно получить список всех дисков через FileSystemObject, затем GetDrive'ом определить какой из них CDrom.
А открыть папку - Shell "explorer e:\",vbNormalFocus
Номер ответа: 2
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #2
Добавлено: 02.07.04 18:24
Private Sub Form_Load()
Dim fso, drives, drv
Set fso = CreateObject("Scripting.FileSystemObject"
Set drives = fso.drives
For Each drv In drives
Select Case drv.DriveType
Case 1
MsgBox "Флоп"
Case 2
MsgBox "Жесткий"
Case 3
MsgBox "Сетевой"
Case 4
MsgBox "CD-Rom"
End Select
Next
End Sub
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 02.07.04 19:58
ненужно никаких FSO !!!!
Нужно попросту преребирать сначала (от буквы А,) до конца (до буквы Zю) все буковки латинские, и просматривать их функцией GetDriveType...
Вот например так:
Option Explicit
Private Declare Function GetDriveType Lib "kernel32.dll" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Const DRIVE_CDROM As Long = 5
Private Sub Form_Load()
 im Ret As Long, Cnt As Long, lzStr As String * 4
For Cnt = 3 To 26
lzStr = Chr$(Cnt + &H40) & ":\"
If GetDriveType(lzStr) = DRIVE_CDROM Then
MsgBox lzStr
Exit Sub
End If
Next
End Sub
Номер ответа: 4
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #4
Добавлено: 02.07.04 21:26
sne, Зачем нужны АПИ, если можно без них?
Ведь можно PaintPicture заменить на BitBlt, но зачем?
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 02.07.04 22:12
1. Правильно
2. Быстро
3. Универсальн0, всмысле будет верно на любом языке программирования... ведь не всю жизнь будешь на VB писать... выучил ты VB, а теперь по прихоти MS переучивайся на .НЕТ, а это (АПИ) - НЕЗЫБЛЕМО еще с win95... и, я думаю, будет существовать еще долго!
4. Универсальн0, всмысле будет работать и на win95
5. Не нужно беспокоиться о установленности бяки
6. Не нужно утруждать себя подключением разной хрени
Достаточно доводов, чтобы сказать что ты не прав !? )
И что стоит выучить АПИ !? :D
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 03.07.04 00:27
To sne: Respect!!! Поддерживаю!
Номер ответа: 7
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #7
Добавлено: 03.07.04 07:08
Наверно мне так и не суждено их(апи) полюбить
Номер ответа: 8
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #8
Добавлено: 03.07.04 07:11
sne, а ты умеешь GdiTransparentBlt юзать?
Какой там последний параметр В crTransparent?
Номер ответа: 9
Автор ответа:
Ragnasaur
Вопросов: 4
Ответов: 6
Профиль | | #9
Добавлено: 03.07.04 11:32
это всё понятно, но что делать если у меня 2 Cd-rom и надо открыть именно тот диск на котором находится нужная папка. Требуется открыть не корень диска, а папку н-р tools.
Номер ответа: 10
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #10
Добавлено: 03.07.04 12:01
hammer, если верить MSDN, то этот параметр отвечает за прозрачный цвет...
Номер ответа: 11
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #11
Добавлено: 03.07.04 12:03
так не выходи из цикла... и продолжай разглядывать где у тебя СД-РОМ...
А открывать тебе прийдется не обычным способом (который везде описан), а через DeviceIoControl...
Номер ответа: 12
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #12
Добавлено: 03.07.04 12:13
ой так тебе не СиДи-Ром открывать, а паку )
Тогда действительно в том же цикле не выходи из него, при нахождении первого, а продолжай "сканирование".
Как находишь СиДи-Ром, начинаешь рекурсивный перебор каталогов... если хочешь узнать какие папки и файлы там вообще есть...
Если и так все знаешь, то используешь:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
call shellexecute(0&, "open", [drive][folder], vbnullstring, vbnullstring, 1)
Или что-то в этом роде...
Номер ответа: 13
Автор ответа:
Chill
ICQ: 554200
Вопросов: 101
Ответов: 343
Профиль | | #13
Добавлено: 03.07.04 13:42
Для vb, что-то вроде:
Option Explicit
Private Declare Function GetLogicalDriveStrings Lib "kernel32.dll" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetDriveType Lib "kernel32.dll" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Const DRIVE_CDROM As Long = 5
Private Sub Form_Load()
 im str As String * 100
 im strArray() As String
 im i As Integer
 im arrSize As Integer
GetLogicalDriveStrings Len(str), str
 ebug.Print str
strArray = Split(str, "\"
arrSize = UBound(strArray)
 ebug.Print "array size: " & arrSize
For i = 0 To arrSize - 1
If GetDriveType(strArray(i)) = DRIVE_CDROM Then
 ebug.Print "drive: " & strArray(i) & " cd-rom"
End If
Next
End Sub
Номер ответа: 14
Автор ответа:
Ragnasaur
Вопросов: 4
Ответов: 6
Профиль | | #14
Добавлено: 03.07.04 15:09
поподробнее plz про подпрограмму проверки на существование папки на диске или рекурсивный перебор
Номер ответа: 15
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #15
Добавлено: 04.07.04 00:08
про перебор см. пример ScanForFolders (Перминов Андрей)