С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/31: Рейтинг темы: голосов - 31, средняя оценка - 4.90
 Аватар для Mecid
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,246

Программно открыть CD-ROM

29.05.2008, 22:13. Показов 6497. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как програмно открыть CD-ROM?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2008, 22:13
Ответы с готовыми решениями:

Открыть лоток CD-ROM-a
Ну все теперь я гроза CD-ROM`ов:umnik:

Как открыть нужный CD-Rom.
Доброго дня всем! У меня на компе два CD-Rom'а. С помощью следующего кода открывается сидюк D: Private Sub Command1_Click() Dim...

Открыть каталог программно
Здравствуйте, я тут обнаружил, что функция Shell не открывает каталог (хотя по-моему мнению неудивительно). Подскажите, что может...

7
0 / 0 / 0
Регистрация: 30.05.2008
Сообщений: 2
30.05.2008, 21:42
Объявляешь Function:
Visual Basic
1
2
3
4
Private Declare Function mciSendString "winmm.dll" _
Alias "mciSendStringA" (ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long
Чтоб открыть:
Visual Basic
1
mciSendString "Set cdaudio door open wait", 0, 0, 0
Потом, наверно, захочется закрыть, а под стол лазить неохота. Тогда:
Visual Basic
1
mciSendString "Set cdaudio door closed wait", 0, 0, 0
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
10.06.2008, 20:59
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Const AliasName = "MyCoolCdrom"
Sub EjectCDROM(aLetter As String)
    If mciSendString("open " & aLetter & ": type cdaudio alias " & AliasName & aLetter & " shareable wait", 0, 0, 0) Then
        mciSendString "set " & AliasName & aLetter & " door open wait", 0, 0, 0
        mciSendString "close " & AliasName & aLetter & " wait", 0, 0, 0
    End If
End Sub
Sub CloseCDROM(aLetter As String)
    If mciSendString("open " & aLetter & ": type cdaudio alias " & AliasName & aLetter & " shareable wait", 0, 0, 0) Then
        mciSendString "set " & AliasName & aLetter & " door closed wait", 0, 0, 0
        mciSendString "close " & AliasName & aLetter & " wait", 0, 0, 0
    End If
End Sub
 
'...
EjectCDROM "e"
CloseCDROM "e"
1
1 / 1 / 0
Регистрация: 23.06.2008
Сообщений: 9
07.07.2008, 20:31
Можно сделать это с помощью очень низкоуровневой API-функции DeviceIoControl.
Будьте чрезвычайно осторожны с этой функцией!
Она же, например, форматирует диски, так, что если вы перепутаете значения констант...

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type 'SECURITY_ATTRIBUTES
 
Private Type OVERLAPPED
    Internal As Long
    InternalHigh As Long
    offset As Long
    OffsetHigh As Long
    hEvent As Long
End Type 'OVERLAPPED
 
Private Declare Function CreateFile Lib "kernel32" _
  Alias "CreateFileA" (ByVal lpFileName As String, _
  ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, _
  lpSecurityAttributes As SECURITY_ATTRIBUTES, _
  ByVal dwCreationDisposition As Long, _
  ByVal dwFlagsAndAttributes As Long, _
  ByVal hTemplateFile As Long) As Long
 
Private Declare Function DeviceIoControl Lib "kernel32" _
  (ByVal hDevice As Long, ByVal dwIoControlCode As Long, _
  lpInBuffer As Any, ByVal nInBufferSize As Long, _
  lpOutBuffer As Any, ByVal nOutBufferSize As Long, _
  lpBytesReturned As Long, lpOverlapped As OVERLAPPED) As Long
 
Private Declare Function CloseHandle Lib "kernel32" _
  (ByVal hObject As Long) As Long
 
Private Const FILE_SHARE_READ = &H1&
Private Const FILE_SHARE_WRITE = &H2&
Private Const OPEN_EXISTING = 3&
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const INVALID_HANDLE_VALUE = -1
Private Const IOCTL_STORAGE_EJECT_MEDIA = &H2D4808
Private Const IOCTL_STORAGE_LOAD_MEDIA = &H2D480C
 
'Функция для открытия дисковода
Public Function EjectCD(ByVal drivePath As String) As Boolean
    Dim drFullPath As String
    Dim hDevice As Long, nBytesReturned As Long
    Dim sa As SECURITY_ATTRIBUTES
    Dim ol As OVERLAPPED
    
    'Удаляем на всякий случай лишнюю косую черту,
    'если путь к дисководу её содержит
    drivePath = Replace(drivePath, "", vbNullString)
    
    'Перед буквой диска обязательно вставить
    'эту комбинацию символов
    drFullPath = "\\." & LCase(drivePath)
    
    'Получим дескриптор дисковода
    hDevice = CreateFile( _
      drFullPath, _
      GENERIC_READ, _
      FILE_SHARE_READ Or FILE_SHARE_WRITE, _
      sa, OPEN_EXISTING, 0, 0)
    
    'Если дескриптор верный, открываем CD-ROM,
    'и возвращаем True для контроля за его состоянием
    If hDevice <> INVALID_HANDLE_VALUE Then
        EjectCD = CBool(DeviceIoControl(hDevice, _
          IOCTL_STORAGE_EJECT_MEDIA, 0, 0, 0, 0, _
          nBytesReturned, ol))
        'Закроем дескриптор, так как он больше не нужен
        CloseHandle hDevice
    End If
End Function 'EjectCD
 
'Функция для закрытия дисковода
Public Function LoadCD(ByVal drivePath As String) As Boolean
    Dim drFullPath As String
    Dim hDevice As Long, nBytesReturned As Long
    Dim sa As SECURITY_ATTRIBUTES
    Dim ol As OVERLAPPED
    
    drivePath = Replace(drivePath, "", "")
    drFullPath = "\\." & LCase(drivePath)
    
    hDevice = CreateFile( _
      drFullPath, _
      GENERIC_READ, _
      FILE_SHARE_READ Or FILE_SHARE_WRITE, _
      sa, OPEN_EXISTING, 0, 0)
    
    If hDevice <> INVALID_HANDLE_VALUE Then
        LoadCD = CBool(DeviceIoControl(hDevice, _
          IOCTL_STORAGE_LOAD_MEDIA, 0, 0, 0, 0, _
          nBytesReturned, ol))
        CloseHandle hDevice
    End If
End Function 'LoadCD
1
 Аватар для mikityak
617 / 22 / 0
Регистрация: 30.09.2007
Сообщений: 357
07.07.2008, 22:37
Люди а кто знает как вот Даная прога добавила в проводнику возможность закрытия. Cdclose.exe
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
08.07.2008, 21:29
А как она добавила? В контекстное меню для диска что ли?
0
0 / 0 / 0
Регистрация: 16.03.2009
Сообщений: 6
16.03.2009, 16:25
как с помощью VB.6 узнать какой CD-ROM, т.е его название, надо чтобы например при запуске формы название привода отображалось в текстовом поле?

Помогите ребята!!!!!!

Добавлено через 7 минут 2 секунды
как с помощью VB.6 узнать какой CD-ROM, т.е его название, надо чтобы например при запуске формы название привода отображалось в текстовом поле?

Помогите ребята!!!!!!
0
0 / 0 / 0
Регистрация: 27.03.2009
Сообщений: 26
22.01.2011, 20:42
Объявляешь Function:
А если надо указать букву привода, куда ее вставлять?

Добавлено через 3 часа 18 минут
Visual Basic
1
2
3
4
5
6
7
Private Const AliasName = "MyCoolCdrom"
Sub EjectCDROM(aLetter As String)
    If mciSendString("open " & aLetter & ": type cdaudio alias " & AliasName & aLetter & " shareable wait", 0, 0, 0) Then
        mciSendString "set " & AliasName & aLetter & " door open wait", 0, 0, 0
        mciSendString "close " & AliasName & aLetter & " wait", 0, 0, 0
    End If
End Sub ...
Вован, помогите плз разобраться как работает конструкция:
Visual Basic
1
If mciSendString("open " & aLetter & ": type cdaudio alias " & AliasName & aLetter & " shareable wait", 0, 0, 0) Then ...
По идее это проверка на TRUE/FALSE.
Следуя этой логике
Visual Basic
1
Debug.Print mciSendString("close " & aLetter & ": type cdaudio alias " & AliasName & aLetter & " shareable wait", 0, 0, 0)
должен выдавать булевые значения, а выдает 263 или 289 в зависимости от положения лотка. Не понимаю как это срабатывает в конструкции If ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.01.2011, 20:42
Помогаю со студенческими работами здесь

Программно открыть вторую форму
Мне надо что бы я когда нажал на надпись(labellink) открылось второе окно

Как программно открыть и закрыть CD-ROM?
Как программно открыть и закрыть CD-ROM?

Открыть CD-ROM
Добрый день, снова обращаюсь к вам. Можно ли на C# открыть и закрыть CD-ROM. Если да, то как?

Открыть/закрыть CD-ROM
Как программно открыть и закрыть CD-ROM?

Открыть/закрыть CD-ROM
Как программно открыть и закрыть CD-ROM?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru