Const WM_DEVICECHANGE =&H219
Сообщение WM_DEVICECHANGE уведомляет приложение об изменении состоянии устройства. В частности, с помощью этого сообщения можно автоматически определить появление и изымание компакт-диска в приводе CD-ROM (DVD-ROM). Окно получает сообщение через функцию обратного вызова WindowProc
DBT_CONFIGCHANGECANCELED | A request to change the current configuration (dock or undock) has been canceled |
DBT_CONFIGCHANGED | The current configuration has changed, due to a dock or undock. |
DBT_CUSTOMEVENT | A custom event has occurred. Windows NT 4.0/95: Не поддерживается |
DBT_DEVICEARRIVAL | A device or piece of media has been inserted and is now available. |
DBT_DEVICEQUERYREMOVE | Permission is requested to remove a device or piece of media. Any application can deny this request and cancel the removal. |
DBT_DEVICEQUERYREMOVEFAILED | A request to remove a device or piece of media has been canceled. |
DBT_DEVICEREMOVECOMPLETE | A device or piece of media has been removed. |
DBT_DEVICEREMOVEPENDING | A device or piece of media is about to be removed. Cannot be denied. |
DBT_DEVICETYPESPECIFIC | A device-specific event has occurred. |
DBT_DEVNODES_CHANGED | A device has been added to or removed from the system. Windows NT 4.0/95/98: Не поддерживается |
DBT_QUERYCHANGECONFIG | Permission is requested to change the current configuration (dock or undock). |
DBT_USERDEFINED | The meaning of this message is user-defined |
' Данный пример автоматически определит ' появление и изымание компакт-диска в приводе CD-ROM. ' Проверка действия примера очень проста: ' запустите проект на выполнение, 'затем вставьте диск и смотрите ' Поместите код в модуль, ' т.к. используется функция обратного вызова Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal _ lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As _ Long, ByVal lParam As Long) As Long Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal _ hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal _ hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Const GWL_WNDPROC = (-4) Public Const WM_DEVICECHANGE = &H219 Public OldWindowProc As Long
Public Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam _ As Long, ByVal lParam As Long) As Long If Msg = WM_DEVICECHANGE Then Select Case wParam ' Событие возникает при появлении нового диска в CD-ROM Case &H8000& Call Form1.DeviceArrival ' Событие возникает при изъятии диска из CD-ROM Case &H8004& Call Form1.DeviceRemoveComplete End Select WindowProc = 0 Exit Function End If ' остальные сообщения передаются ' для обработки стандартной процедуре окна WindowProc = CallWindowProc(OldWindowProc, hwnd, Msg, wParam, lParam) End Function ' Поместите код в модуль формы Private Sub Form_Load() ' Перенаправление сообщений Windows от формы к собственной ' процедуре обработки сообщений Module1.WindowProc OldWindowProc = GetWindowLong(hwnd, GWL_WNDPROC) SetWindowLong hwnd, GWL_WNDPROC, AddressOf WindowProc End Sub Private Sub Form_Unload(Cancel As Integer) ' Возвращение управления форме SetWindowLong hwnd, GWL_WNDPROC, OldWindowProc End Sub Sub DeviceArrival() ' Здесь вы можете поместить код, который будет выполнятся при ' появление компакт-диска в устройстве CD-ROM Label1.Caption = "Вставлен диск" End Sub Sub DeviceRemoveComplete() ' Здесь вы можете поместить код, который будет выполнятся при ' удалении компакт-диска из устройства CD-ROM Label1.Caption = "Диск удален" End Sub