второй CD-ROM

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Flur
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 3
Зарегистрирован: 13.11.2004 (Сб) 14:55

второй CD-ROM

Сообщение Flur » 13.11.2004 (Сб) 15:09

Как открыть/закрыть программно второй CD-ROM(зная его имя или необязательно)?

skord
Китаец
Китаец
 
Сообщения: 572
Зарегистрирован: 14.10.2004 (Чт) 15:36
Откуда: Иркутск

Сообщение skord » 13.11.2004 (Сб) 15:59

Не знаю как с именем но могу предложить другой способ.
Короче, в Project\References подключи FSO и Windows\System32\wmp.dll (у тебя должен стоять Windows Media Player иначе не получится)

Код: Выделить всё
Dim fso As New FileSystemObject'подключаем FSO
Dim mp As New WindowsMediaPlayer'подключаем Media Player
Dim x, drive

Private Sub Command1_Click()
x = -1
For Each drive In fso.Drives'перебирем устрйства
If drive.DriveType = 4 Then'Если сидюк
x = x + 1
mp.cdromCollection.Item(x).eject'извлекаем
End If
Next
End Sub



Этот код открывает ВСЕ сд-ромы. Ты можешь подобрать номер своих и извлекать каждай по отдельности.

Flur
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 3
Зарегистрирован: 13.11.2004 (Сб) 14:55

Сообщение Flur » 13.11.2004 (Сб) 21:30

Фэнкс !, кто ещё ответит желательно на чистом VB
(да кстати там нужна только эта dll или весь Windows Media Player)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.11.2004 (Сб) 21:37

Весь.
Изображение

Flur
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 3
Зарегистрирован: 13.11.2004 (Сб) 14:55

Сообщение Flur » 16.11.2004 (Вт) 18:23

Как открыть/закрыть программно второй CD-rom на чистом VB

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 16.11.2004 (Вт) 20:30

Поставь в диалоге "Components" ссылку на Microsoft Multimedia Control 6.0 - и посмотри его в object browsere (библиотека MCI, объект (контрол) "MMControl").

У него есть метод Command, который принимает аргумент "Eject". У меня просто убит CD-rom и я не могу ни сам попробовать, ни посмотреть диск с MSDN. Как раз ищу такое же :wink: . попробую в и-нете.
Есть ли у меня вопрос? У меня всегда есть вопрос

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 16.11.2004 (Вт) 23:11

Может это попробуй:
Код: Выделить всё
Option Explicit

Public Declare Function mciSendString _
    Lib "winmm.dll" Alias "mciSendStringA" _
    (ByVal lpstrCommand As String, _
    ByVal lpstrReturnString As String, _
    ByVal uReturnLength As Long, _
    ByVal hWndCallback As Long) As Long

Открыть лоток
Код: Выделить всё
    mciSendString "Set CDAudio Door Open Wait", _
        vbNullString, 0, 0

Закрыть лоток
Код: Выделить всё

    mciSendString "Set CDAudio Door Closed Wait", _
        vbNullString, 0, 0

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 8:18

Killer писал(а):eto tolko dla standartnogo cd-rom

В смысле, для первого?
Тогда и контрол (MMControl) не подойдет - он, собственно, эту библиотеку и команды юзает.
А как имена девайсов хранятся в реестре? там только один, выходит, девайс, который открывается через "open cdaudio"?
Последний раз редактировалось Eugenio 17.11.2004 (Ср) 9:12, всего редактировалось 2 раз(а).
Есть ли у меня вопрос? У меня всегда есть вопрос

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 17.11.2004 (Ср) 8:28

Вот это попробуйте:
Код: Выделить всё
'Example by Howard Henry Schlunder
' This example requires one command button (Command1)
Private Declare Function GetVersion Lib "kernel32" () As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, 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 Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const INVALID_HANDLE_VALUE = -1
Private Const OPEN_EXISTING = 3
Private Const FILE_FLAG_DELETE_ON_CLOSE = 67108864
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const IOCTL_STORAGE_EJECT_MEDIA = 2967560
Private Const VWIN32_DIOC_DOS_IOCTL = 1

Private Type DIOC_REGISTERS
  reg_EBX As Long
  reg_EDX As Long
  reg_ECX As Long
  reg_EAX As Long
  reg_EDI As Long
  reg_ESI As Long
  reg_Flags As Long
End Type

Private Sub Command1_Click()
Dim hDrive As Long, DummyReturnedBytes As Long
Dim EjectDrive As String, DriveLetterAndColon As String
Dim RawStuff As DIOC_REGISTERS
  EjectDrive = InputBox("Which drive shall we try to eject the media from?", "Eject Media")
  If Len(EjectDrive) Then 'Confirm the user didn't cancel
    DriveLetterAndColon = UCase(Left$(EjectDrive & ":", 2)) 'Make it all caps for easy interpretation
    If GetVersion >= 0 Then 'We are running Windows NT/2000
      hDrive = CreateFile("\\.\" & DriveLetterAndColon, GENERIC_READ Or GENERIC_WRITE, 0, ByVal 0, OPEN_EXISTING, 0, 0)
      If hDrive <> INVALID_HANDLE_VALUE Then
        'Eject media!
        Call DeviceIoControl(hDrive, IOCTL_STORAGE_EJECT_MEDIA, 0, 0, 0, 0, DummyReturnedBytes, ByVal 0)
        Call CloseHandle(hDrive)  'Clean up after ourselves
      End If
    Else  'We are running Win9x/Me
      hDrive = CreateFile("\\.\VWIN32", 0, 0, ByVal 0, 0, FILE_FLAG_DELETE_ON_CLOSE, 0)
      If hDrive <> INVALID_HANDLE_VALUE Then
        'Setup our raw registers to use Interrupt 21h Function 440Dh Minor Code 49h
        RawStuff.reg_EAX = &H440D   'The function to use
        RawStuff.reg_EBX = Asc(DriveLetterAndColon) - Asc("A") + 1 'The drive to do it on
        RawStuff.reg_ECX = &H49 Or &H800     'The minor code of the function in the low byte of the low word and the device category of 8 in the high byte of the low word
        'Eject media!
        Call DeviceIoControl(hDrive, VWIN32_DIOC_DOS_IOCTL, RawStuff, LenB(RawStuff), RawStuff, LenB(RawStuff), DummyReturnedBytes, ByVal 0)
        Call CloseHandle(hDrive)  'Clean up after ourselves
      End If
    End If
  End If
End Sub
الفيجوال بيسك الرابح

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Сообщение seelts » 13.10.2005 (Чт) 7:09

от сюда попал в эту тему по этому думаю правильнее будет написать тут.
есть такая программа Type And Run называется и у неё есть плагин tar_system.dll, который умеет открываь/закрывать лотки СДрома по отдельности. но это помоему единственный плагин без исходников 8(... попробуйте связаться с автором: офсайт
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 111

    TopList