Delphi: Работа с устройства на Windows

Написано на 26 януари 2009 г. Публикувано в Delphi

СЪДЪРЖАНИЕ

Проследяване на промените в хардуерната конфигурация

Когато има някаква промяна в хардуерния профил, съобщение WM_DEVICECHANGE се изпраща до главния прозорец на приложението. Когато това съобщение бъде получено, WParam съдържа код на събитие. Интересуват ни само три кода: DBT_DEVICEARRIVAL, DBT_DEVICEREMOVECOMPLETE и DBT_DEVNODES_CHANGED.

Събитието DBT_DEVNODES_CHANGED показва, че е имало промяна в хардуерния профил. LParam в този случай е равен на нула. Събитията DBT_DEVICEARRIVAL и DBT_DEVICEREMOVECOMPLETE са идентични и се различават по това, че първото събитие означава прикачено устройство и второ отделяне на устройство. LParam е ненулев за тези събития и сочи към структура DEV_BROADCAST_HDR. Допълнителните полета могат да варират в зависимост от полето dbch_devicetype в тази структура. Например, ако dbch_devicetype е DBT_DEVTYP_VOLUME, тогава LParam в този случай сочи към структурата DEV_BROADCAST_VOLUME и полето dbcv_unitmask в тази структура съдържа битовата маска на новите дискове. (бит нула означава буква A, втора буква B, трета буква C и т.н.).

Няма смисъл да се дава кодът на манипулатора за това съобщение, той се съдържа в изходния код, който е приложен към статията.

Първият параметър е манипулатор на състоянието на услугата или манипулатор на формуляр. Параметърът NotificationFilter е указател към структурата DEV_BROADCAST_HDR и задава типа устройства за проследяване. За да проследявате всички устройства, dbch_devicetype трябва да бъде равен на DBT_DEVTYP_DEVICEINTERFACE. За да получавате промени за всички класове устройства. Ако третият параметър е DEVICE_NOTIFY_WINDOW_HANDLE, тогава първият параметър трябва да бъде манипулатор на прозореца, ако DEVICE_NOTIFY_SERVICE_HANDLE, тогава първият параметър е манипулатор на състоянието на услугата. Също така, за да получавате съобщения за промени във всички класове устройства, този параметър трябва да включва флага DEVICE_NOTIFY_ALL_INTERFACE_CLASSES.

Това е краят на тази статия. Статията е придружена от изходен код в Delphi с пример за получаване на списък с устройства, пример за изключване на устройство, безопасно изключване на устройство, както и поддържане на дневник за промени в хардуерния профил.