![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Включение/выключение устройства [D5, Win95/98, WinXP]
GEN++ © (2005-07-12 21:04:00)При этих ситуациях система генерит сообщеение VM_DEVICECHANGE
(под Win 98 - 4 раза под XP - 3 раза)
В справке указано, что парамеры передают тип события, но
приводятся они только в символьном виде)
У меня проблема, отследить появление/снятие Comm порта
сидященго на USB под драйвером CP2101(при отключении/установке
кабеля). Закрытие приложения при снятии кабеля тянет за собой
"синий экран, если не предпринять мер.
Вопрос: как грамотно разобрать сообщение.
Заранее спасибо.
GEN++ (2005-07-20 20:24:00) [1]>Virgo_Style
Спасибо! Кое-чем помогло.
Под Win 98 все нормально, но вот под XP
поблема следующая: на некоторох компах
генерится параметр $8000 при восстановлении устройства
и $8004 при удалении, но на Ноуте в качестве параментра
устойчиво, 3 раза подряд выдается 0 как при активизации
устройства, так и при его физическом удаплении. В панели
появление и удаление устройства четко отслеживается.
Может быть все же кто-нибудь с этим работал. Нужна помощь.
Virgo_Style (2005-07-12 22:08:00) [2]
const DBT_DEVICEARRIVAL = $8000;
const DBT_DEVICEQUERYREMOVE = $8001;
const DBT_DEVICEQUERYREMOVEFAILED = $8002;
const DBT_DEVICEREMOVEPENDING = $8003;
const DBT_DEVICEREMOVECOMPLETE = $8004;
const DBT_DEVICETYPESPECIFIC = $8005;
const DBT_CONFIGCHANGED = $0018;
procedure TForm1.WMDeviceChange(var Message: TMessage);
var
s : string;
begin
{Do Something here}
case Message.wParam of
DBT_DEVICEARRIVAL :
s := 'A device has been inserted and is now available';
DBT_DEVICEQUERYREMOVE: begin
s := 'Permission to remove a device is requested';
ShowMessage(s);
{True grants premission}
Message.Result := integer(true);
exit;
end;
DBT_DEVICEQUERYREMOVEFAILED :
s := 'Request to remove a device has been canceled';
DBT_DEVICEREMOVEPENDING :
s := 'Device is about to be removed';
DBT_DEVICEREMOVECOMPLETE :
s := 'Device has been removed';
DBT_DEVICETYPESPECIFIC :
s := 'Device-specific event';
DBT_CONFIGCHANGED :
s:= 'Current configuration has changed'
else s := 'Unknown Device Message';
end;
ShowMessage(s);
inherited;
end;
Откуда взял - не помню...
simpson (2005-07-12 21:27:00) [3]Return Values
Return TRUE to grant the request.
Return BROADCAST_QUERY_DENY to deny the request.
Remarks
For devices that offer software-controllable features, such as ejection and locking, the system typically sends a DBT_DEVICEREMOVEPENDING message to let applications and device drivers end their use of the device gracefully. If the system forcibly removes a device, it may not send a DBT_DEVICEQUERYREMOVE message before doing so.
Читал?