Call mciSendString("Set CDAudio Door Open Wait", 0&, 0&, 0&)
Call mciSendString("Set CDAudio Door Closed Wait", 0&, 0&, 0&)
ИМХО: вопрос далеко не новый и ответы на него можно найти повсюду, гораздо реже обсуждается вопрос кк заблокировать дверцу CD-ROM'a... Хотя, повторюсь, по моему мнению, вопрос с блокировкой куда интереснее
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 Long) 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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const GENERIC_READ As Long = &H80000000 Private Const FILE_SHARE_READ As Long = &H1 Private Const FILE_SHARE_WRITE As Long = &H2 Private Const OPEN_EXISTING As Long = 3 Private Const IOCTL_STORAGE_MEDIA_REMOVAL As Long = &H2D4804
Private Type PREVENT_MEDIA_REMOVAL PreventMediaRemoval As Boolean End Type
Public Function LockCD(sDrive As String, bLock As Boolean) As Boolean Dim hDevice As Long Dim PMR As PREVENT_MEDIA_REMOVAL Dim btRet As Long
К стати, сюда же в тему, пока писал предыдкщий код, нашел:
'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
Можно, если объединить пример №3 и №4, т.е. фун-ей CreateFile по другому воспользоваться, в зависимости от типа системы... Почитай MSDN, функцию DeviceIoControl, там и примеры есть на VС
ежели не в лом, напиши как по другому воспользоваться CreateFile ? Я MSDN конечно-же попробую почитать, но с английским у меня не совсем всё хорошо ... ( Может черкнёшь пару строк как переделать код, что-бы в win9x cd залочить???