Аватар для Mecid
684 / 233 / 16
Регистрация: 15.10.2007
Сообщений: 1,246

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

29.05.2008, 22:13. Показов 6529. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru