В приложении нужно анализировать, если на ходу подключается 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);