首先在BEGIN_MESSAGE_MAP(C串口通信助手Dlg, CDialogEx)中添加
ON_WM_DEVICECHANGE();
然后函数实现:
BOOL C串口通信助手Dlg::OnDeviceChange(UINT nEventType, DWORD dwData)
{
//0x4d36e978L, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18
//DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*) dwData;
DEV_BROADCAST_HDR* dhr = (DEV_BROADCAST_HDR *)dwData;
TRACE("--nEventType--:%d\n", nEventType);
switch (nEventType)
{
case DBT_DEVICEREMOVECOMPLETE://移除设备
TRACE("--DEVICE REMOVE--\n");
#if 1
if (dhr->dbch_devicetype == DBT_DEVTYP_PORT)
{
PDEV_BROADCAST_PORT lpdbv = (PDEV_BROADCAST_PORT)dhr;
int len = strlen((const char *)lpdbv->dbcp_name);
CString name(lpdbv->dbcp_name);//COM8
int port = 0;
sscanf((const char *)name.GetBuffer(0), "COM%d", &port);
m_bOpenCom = FALSE;
if (m_cmsCom.get_PortOpen())
m_cmsCom.put_PortOpen(FALSE); //关闭串口
MessageBox(na