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

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

29.05.2008, 22:13. Показов 6541. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru