出自:http://topic.csdn.net/t/20030529/11/1849598.html
先用CM_Locate_DevNode得到设备管理树的根结点,然后用CM_Reenumerate_DevNode以这个根结点为参数刷新它就搞定!在MSDN里面可以查到这两个函数的用法,相关的知识里面也有。
#include <cfgmgr32.h>
BOOL ScanForHardwareChange()
{
DEVINST devInst;
CONFIGERT status;
//得到设备管理树的根结点
status = CM_Locate_DevNode(&devInst,NULL,CM_LOCATE_DEVNODE_NARMAL);
if (status!=CR_SUCCESS)
{
printf( "CM_Locate_DevNode failed: %x\n ",status);
return FALSE;
}
//刷新
status = CM_Reenumerate_DevNode(devInst,CM_REENUMERATE_ASYNCHRONOUS); //CM_REENUMERATE_ASYNCHRONOUS 异步方式可以立即响应
if (status !=CR_SUCCESS)
{
printf( "CM_Reenumerate_DevNode failed: %x\n ",status);
return FALSE;
}
return TRUE;
}
直接使用这个函数就可以了。
如果电脑上没有安装DDK,也可以通过引用cfgmgr32.dll,里面已经封装了这两个函数。