Событие DBT_DEVICEARRIVAL не приходит!
От: Buratino  
Дата: 19.03.04 14:20
Оценка:
В приложении нужно анализировать, если на ходу подключается USB видеокамера.
При подключении происходит специфичное для Win2k&XP событие DBT_DEVNODES_CHANGED, причем независимо от того, был ли вызов RegisterDeviceNotification или нет (при вкл.2 раза, при откл. 1 раз). Почему же не приходит общее для всех Win DBT_DEVICEARRIVAL??
 DEV_BROADCAST_DEVICEINTERFACE DevDesc;
  DevDesc.dbcc_size= sizeof(DevDesc);
  DevDesc.dbcc_devicetype= DBT_DEVTYP_DEVICEINTERFACE;
  DevDesc.dbcc_classguid= CLSID_VideoInputDeviceCategory;
  DevDesc.dbcc_name[1]= 0;
  
  DevNotify= NULL;
  DevNotify= RegisterDeviceNotification(Handle,
                                        &DevDesc,
                                        DEVICE_NOTIFY_WINDOW_HANDLE
                                        );
//--------------------------------------------------------------------------------------
/*
class TMainForm : public TForm
{
__published:
...
private:    
...
public:
...
protected:
        HDEVNOTIFY DevNotify;
        BEGIN_MESSAGE_MAP
                VCL_MESSAGE_HANDLER(WM_DEVICECHANGE, TMessage, DeviceChanged)
        END_MESSAGE_MAP(TForm)
        void __fastcall DeviceChanged(TMessage);
};
*/


void __fastcall TMainForm::DeviceChanged(TMessage msg)
{

    switch(msg.WParam)
    {
      case DBT_DEVICEARRIVAL://The event never occured
        //processing 
        break;
      case DBT_DEVNODES_CHANGED: //Win2k&XP specific event
        //processing 
        break;
    }
}


//--------------------------------------------------------------------------------------

  if (!DevNotify) UnregisterDeviceNotification(DevNotify);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.