1,486
社区成员
发帖
与我相关
我的任务
分享
Dim POSTObj As Object
Dim COMPost As Object
Combo1.Clear
Set POSTObj = WMIObj.InstancesOf("Win32_SerialPort")
For Each COMPost In POSTObj
'以下判断你的USB驱动名称进行识别
Combo1.AddItem COMPost.Description & "(" & COMPost.DeviceID & ")"
Combo1.ItemData(Combo1.ListCount - 1) = Int(Right(COMPost.DeviceID, Len(COMPost.DeviceID) - 3))
Next
Combo1.ListIndex = 0
//***********************
// 枚举所有的串口,以及名称
//***********************
int
EnumAllComm( TCHAR *buf )
{
HKEY hkey;
int result;
int i = 0;
*buf = 0;
result = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
_T( "Hardware\\DeviceMap\\SerialComm" ),
NULL,
KEY_READ,
&hkey );
if( ERROR_SUCCESS == result ) // 打开串口注册表
{
TCHAR portName[ 0x100 ], commName[ 0x100 ];
DWORD dwLong, dwSize;
do
{
dwSize = sizeof( portName ) / sizeof( TCHAR );
dwLong = dwSize;
result = RegEnumValue( hkey, i, portName, &dwLong, NULL, NULL, ( LPBYTE )commName, &dwSize );
if( ERROR_NO_MORE_ITEMS == result )
{
// 枚举串口
break; // commName就是串口名字
}
_tcscpy( buf, commName );
buf += ( _tcslen( buf ) + 1 );
i++;
} while ( 1 );
RegCloseKey( hkey );
}
*buf = 0;
return i;
}
Dim WMIObj As Object
Set WMIObj = CreateObject("winmgmts://./root/cimv2")
'对象信息 ================================================
Dim POSTObj As Object
Dim COMPost As Object
Combo1.Clear
Set POSTObj = WMIObj.InstancesOf("Win32_SerialPort")
For Each COMPost In POSTObj
'以下判断你的USB驱动名称进行识别
Combo1.AddItem COMPost.Description & "(" & COMPost.DeviceID & ")"
Combo1.ItemData(Combo1.ListCount - 1) = Int(Right(COMPost.DeviceID, Len(COMPost.DeviceID) - 3))
Next
Combo1.ListIndex = 0
Private Sub Command1_Click()
Dim WMIObj As Object
Set WMIObj = CreateObject("winmgmts://./root/cimv2")
Dim POSTObj As Object
Dim COMPost As Object
Combo1.Clear
Set POSTObj = WMIObj.InstancesOf("Win32_SerialPort")
For Each COMPost In POSTObj
'以下判断你的USB驱动名称进行识别
Combo1.AddItem COMPost.Description & "(" & COMPost.DeviceID & ")"
Combo1.ItemData(Combo1.ListCount - 1) = Int(Right(COMPost.DeviceID, Len(COMPost.DeviceID) - 3))
Next
Combo1.ListIndex = 0
End Sub
//********************************************************************************
//** 函 数 名 : GetDeviceState
//** 输 入 : DeviceName - 设备名称
//** 返 回 : BOOL - 返回设备启用/禁用状态
//** 功能描述 : 取得设备的启用或禁用状态
//********************************************************************************
long _stdcall GetDeviceState(char * DeviceName)
{
//------------------------------------------------
// 过程内局部变量定义
//------------------------------------------------
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;
VBString sDeviceDescription;
VBString sDeviceName;
BOOL rd;
DWORD dwRegDataType;
DWORD dwBufferSize;
BYTE *bDevInfo;
long retdata = 0;
DWORD Status;
DWORD Problem;
//初始化基本参数
sDeviceName = DeviceName;
sDeviceName.set_UCase();
//------------------------------------------------
//先通过枚举所有设备找出指定设备名称的相关GUID信息
//------------------------------------------------
//程序开始设下错误陷阱防止意外崩溃
hDevInfo = SetupDiGetClassDevs(NULL,NULL,NULL,DIGCF_PRESENT | DIGCF_ALLCLASSES);
if(hDevInfo == INVALID_HANDLE_VALUE){
return FALSE;
}
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
i = 0;
//开始循环枚举设备信息
while(SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData)!=FALSE){
//------ 取得设备名称 ------
rd = SetupDiGetDeviceRegistryProperty(hDevInfo,
&DeviceInfoData,
SPDRP_DEVICEDESC,
&dwRegDataType,
NULL,
NULL,
&dwBufferSize);
if(rd!=TRUE){
bDevInfo = (BYTE *)GlobalAlloc(GMEM_ZEROINIT, dwBufferSize * 2);
rd = SetupDiGetDeviceRegistryProperty(hDevInfo,
&DeviceInfoData,
SPDRP_DEVICEDESC,
&dwRegDataType,
bDevInfo,
dwBufferSize,
NULL);
sDeviceDescription.set_Bytes(bDevInfo);
sDeviceDescription.set_UCase();
GlobalFree((HGLOBAL)bDevInfo);
if(sDeviceDescription == *sDeviceName){
if(CM_Get_DevNode_Status(&Status,&Problem,DeviceInfoData.DevInst,0)==CR_SUCCESS){
if((Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problem)){
retdata=0;
}else{
retdata=1;
}
}
break;
}
}
i++;
}
SetupDiDestroyDeviceInfoList(hDevInfo);
return retdata;
}