Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #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()
  ;Dim 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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #10
Добавлено: 03.07.04 12:01
hammer, если верить MSDN, то этот параметр отвечает за прозрачный цвет...

Ответить

Номер ответа: 11
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #11
Добавлено: 03.07.04 12:03
так не выходи из цикла... и продолжай разглядывать где у тебя СД-РОМ...
А открывать тебе прийдется не обычным способом (который везде описан), а через DeviceIoControl...

Ответить

Номер ответа: 12
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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()
    ;Dim str As String * 100
    ;Dim strArray() As String
    ;Dim i As Integer
    ;Dim arrSize As Integer
    
    GetLogicalDriveStrings Len(str), str
    ;Debug.Print str
    strArray = Split(str, "\";)
    
    arrSize = UBound(strArray)
    ;Debug.Print "array size: " & arrSize
    
 
    For i = 0 To arrSize - 1
        If GetDriveType(strArray(i)) = DRIVE_CDROM Then
            ;Debug.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-сайт: hw.t-k.ru
 Профиль | | #15
Добавлено: 04.07.04 00:08
про перебор см. пример ScanForFolders (Перминов Андрей)

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам