Сообщение WM_DEVICECHANGE

Const WM_DEVICECHANGE =&H219

Сообщение WM_DEVICECHANGE уведомляет приложение об изменении состоянии устройства. В частности, с помощью этого сообщения можно автоматически определить появление и изымание компакт-диска в приводе CD-ROM (DVD-ROM). Окно получает сообщение через функцию обратного вызова WindowProc

Возвращаемое значение

Сообщение WM_WINDOWPOSCHANGING всегда возвращает 0

Параметры

wParam
Происходящее событие. Может принимать одно из следующих значений
DBT_CONFIGCHANGECANCELEDA request to change the current configuration (dock or undock) has been canceled
DBT_CONFIGCHANGEDThe current configuration has changed, due to a dock or undock.
DBT_CUSTOMEVENTA custom event has occurred. Windows NT 4.0/95: Не поддерживается
DBT_DEVICEARRIVALA device or piece of media has been inserted and is now available.
DBT_DEVICEQUERYREMOVEPermission is requested to remove a device or piece of media. Any application can deny this request and cancel the removal.
DBT_DEVICEQUERYREMOVEFAILEDA request to remove a device or piece of media has been canceled.
DBT_DEVICEREMOVECOMPLETEA device or piece of media has been removed.
DBT_DEVICEREMOVEPENDINGA device or piece of media is about to be removed. Cannot be denied.
DBT_DEVICETYPESPECIFICA device-specific event has occurred.
DBT_DEVNODES_CHANGEDA device has been added to or removed from the system. Windows NT 4.0/95/98: Не поддерживается
DBT_QUERYCHANGECONFIGPermission is requested to change the current configuration (dock or undock).
DBT_USERDEFINEDThe meaning of this message is user-defined
lParam
Указатель на структуру, содержащую данные о заданном событии. Формат данных зависит от значений параметра wParam

Пример

' Данный пример автоматически определит
' появление и изымание компакт-диска в приводе 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

Категория

Устройства