Hi,
I wrote this program for detect usb hid class but I need to Extract all field of PDEV_BROADCAST_DEVICEINTERFACE after
PDEV_BROADCAST_DEVICEINTERFACE pdbch = (PDEV_BROADCAST_DEVICEINTERFACE)dwData;
line ..
I saw msdn help but i couldn't do it help me please..
my point is fill devicetype and class guides
IMAGE:
http://tinypic.com?ref=2i1e788
#include "stdafx.h"
#include "USBDetect.h"
#include "USBDetectDlg.h"
#include "afxdialogex.h"
#include "Guid.h"
#include "Winuser.h"
#include "Dbt.h"
DEV_BROADCAST_DEVICEINTERFACE dbch;
dbch.dbcc_size = sizeof(dbch);
dbch.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
for (int i = 0; i < sizeof(GuidInterfaceList); i++)
{
static int count=0;
count++;
dbch.dbcc_classguid = GuidInterfaceList[i];
dbch.dbcc_name[0] = '\0';
NotificationHandle = RegisterDeviceNotification( GetSafeHwnd(), &dbch, DEVICE_NOTIFY_WINDOW_HANDLE);
void CUSBDetectDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
BOOL CUSBDetectDlg::OnDeviceChange(UINT EventType, DWORD dwData)
{
char Word [50];
char Word1 [57];
char Word2 [50];
char Word3 [50];
char ch = ' ';
CString Msg = "duh";
switch( EventType)
{
case DBT_CONFIGCHANGECANCELED:
Msg.Format("DBT_CONFIGCHANGECANCELED");
break;
case DBT_CONFIGCHANGED:
Msg.Format("DBT_CONFIGCHANGED");
break;
case DBT_CUSTOMEVENT:
Msg.Format("DBT_CUSTOMEVENT");
break;
case DBT_DEVICEARRIVAL:
Msg.Format("DBT_DEVICEARRIVAL");
break;
case DBT_DEVICEQUERYREMOVE:
Msg.Format("DBT_DEVICEQUERYREMOVE");
break;
case DBT_DEVICEQUERYREMOVEFAILED:
Msg.Format("DBT_DEVICEQUERYREMOVEFAILED");
break;
case DBT_DEVICEREMOVEPENDING:
Msg.Format("DBT_DEVICEREMOVEPENDING");
break;
case DBT_DEVICEREMOVECOMPLETE:
Msg.Format("DBT_DEVICEREMOVECOMPLETE");
break;
case DBT_DEVICETYPESPECIFIC:
Msg.Format("DBT_DEVICETYPESPECIFIC");
break;
case DBT_QUERYCHANGECONFIG:
Msg.Format("DBT_QUERYCHANGECONFIG");
break;
case DBT_DEVNODES_CHANGED:
Msg.Format("DBT_DEVNODES_CHANGED");
break;
case DBT_USERDEFINED:
Msg.Format("DBT_USERDEFINED");
break;
default:
Msg.Format("Event type %d",EventType);
}
PDEV_BROADCAST_DEVICEINTERFACE pdbch = (PDEV_BROADCAST_DEVICEINTERFACE)dwData;
if( pdbch!=NULL && pdbch->dbcc_devicetype==DBT_DEVTYP_DEVICEINTERFACE)
{
CString Msg2;
Msg2.Format("%s: %s",Msg,pdbch->dbcc_name);
Msg = Msg2;
}
if (Msg == "DBT_DEVNODES_CHANGED")
{
CListBox* EventList = (CListBox*)GetDlgItem(IDC_EVENT_LIST);
EventList->AddString(Msg);
}
else
{
strncpy_s(Word,Msg,17);
Word[17] = '\0';
if ( strcmp ( Word, "DBT_DEVICEARRIVAL" )== 0 )
{
strncpy_s(Word1,Msg,44);
Word1[44] = '\0';
strncpy_s(Word2, Word1, 17);
Word2[17] = '\0';
strncpy_s(Word3, &Word1[27], 17);
Word3[17] = '\0';
}
else
{
strncpy_s(Word,Msg,24);
Word[24] = '\0';
if ( strcmp ( Word, "DBT_DEVICEREMOVECOMPLETE" )== 0 )
{ strncpy_s(Word1,Msg,51);
Word1[51] = '\0';
strncpy_s(Word2, Word1, 24);
Word2[24] = '\0';
strncpy_s(Word3, &Word1[34], 17);
Word3[17] = '\0'; }
}
if (Word3[0]== 'V')
{
CListBox* EventList = (CListBox*)GetDlgItem(IDC_EVENT_LIST);
EventList->AddString(Word2);
EventList->AddString(Word3);
}
}
return TRUE;
BOOL CUSBDetectDlg::DestroyWindow()
{
if( NotificationHandle)
{
UnregisterDeviceNotification(NotificationHandle);
NotificationHandle = NULL;
}
return CDialog::DestroyWindow();