Как отследить подключение USB устройства
Подскажите как отследить подключение USB устройства желательно на C/C++ (конкретно USB 3G модем). Вроде должно пройти событие по DBUS но какое событие? и как работать с DBUS.
Заранее Спасибо.
Network Menager Либо посмотреть доки самого проекта dbus
Проще всего посмотреть как это делает
Код:
case WM_DEVICECHANGE:
{
if((UINT)wParam == DBT_DEVICEARRIVAL)
{
PDEV_BROADCAST_HDR pHDR = (PDEV_BROADCAST_HDR) lParam;
if(pHDR->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME pVOL = (PDEV_BROADCAST_VOLUME) pHDR;
if(pVOL->dbcv_flags==1)break; //CD drive
//NET or Drive
int mask = pVOL->dbcv_unitmask;
int drive=0;
for(;mask;mask/=2)drive++;
drive+=64;
//PART 1
char fpath[30],dpath[20];
sprintf_s(dpath,5,"%c:\\",drive);// буква диска X:\
if(GetDriveType(dpath)!=DRIVE_REMOVABLE)break; //Если это не USB или другое съемное устройство, то нафиг
//Работем с dpath
}
return TRUE;
}
}
break;
{
if((UINT)wParam == DBT_DEVICEARRIVAL)
{
PDEV_BROADCAST_HDR pHDR = (PDEV_BROADCAST_HDR) lParam;
if(pHDR->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME pVOL = (PDEV_BROADCAST_VOLUME) pHDR;
if(pVOL->dbcv_flags==1)break; //CD drive
//NET or Drive
int mask = pVOL->dbcv_unitmask;
int drive=0;
for(;mask;mask/=2)drive++;
drive+=64;
//PART 1
char fpath[30],dpath[20];
sprintf_s(dpath,5,"%c:\\",drive);// буква диска X:\
if(GetDriveType(dpath)!=DRIVE_REMOVABLE)break; //Если это не USB или другое съемное устройство, то нафиг
//Работем с dpath
}
return TRUE;
}
}
break;
Так что ты,в принципе,молодец,но не тут =)
Цитата: @pixo $oft
MorskoyZmey,вот знаешь,я тоже в такой манере хотел ответить.Но когда глянул,что эта тема всё-таки в разделе для Linux/Unix,благоразумно отказался от этой затеи
Так что ты,в принципе,молодец,но не тут =)
Так что ты,в принципе,молодец,но не тут =)
:-*
Ночь было, невнимательный, помочь хотел
пошарлся на тему Network монитора не нашёл исходники но думаю он мне мало помог бы, ведь он работает с сетевыми интерфейсами а не с устройствами, то есть Network монитор увидит модем только после подключения к сети, если я правильно понимаю.
В общем мои изыскания привели меня к udev, ещё раз пересмотрел архитектуру приложения и думаю ловить событие подключения модема к компьютеру не придётся хотя udev вроде позволяет это делать. udev помог получить список подключённых модемов.
Всё решил через libudev (API интерфейс к udev)
Вот нашол статейку как работать с API udev