获得电脑串口号的方法很多,这里个人仅仅是通过注册表获得串口号,方法如下:
①打开串口注册表
LONG RegOpenKeyEx(
HKEY hKey, // 需要打开的主键的名称
LPCTSTR lpSubKey, //需要打开的子键的名称
DWORD ulOptions, // 保留,设为0
REGSAM samDesired, // 安全访问标记,也就是权限
PHKEY phkResult // 得到的将要打开键的句柄
)
②枚举串口
LONG RegEnumValue( HKEY hKey, DWORD dwIndex, LPTSTR lpValueName,
LPDWORD lpcValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData,
LPDWORD lpcbData);
参数 类型及说明
hKey Long,一个已打开项的句柄,或者指定一个标准项名
dwIndex Long,欲获取值的索引。注意第一个值的索引编号为零
lpValueName String,用于装载位于指定索引处值名的一个缓冲区
lpcbValueName Long,用于装载lpValueName缓冲区长度的一个 变量。一旦返回,它会设为实际载入缓冲区的字符数量
lpReserved Long,未用;设为零
lpType Long,用于装载值的类型代码的变量
lpData Byte,用于装载值数据的一个缓冲区
lpcbData Long,用于装载lpData缓冲区长度的一个变量。一旦返回,它会设为实际载入缓冲区的字符数量
③关闭
LONG RegCloseKey(
HKEY hKey // 释放键的句柄
);
int FindCommPort(CComboBox &cComboBox, CString &szFirstItemOfComPort)
{
HKEY hKey;
int iCount = 0;
if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("Hardware\\DeviceMap\\SerialComm"), NULL, KEY_READ, &hKey) == ERROR_SUCCESS )
{
const BYTE BUFFERSIZE = 255;
char aPortName[BUFFERSIZE], aComName[BUFFERSIZE];
DWORD dwLong = BUFFERSIZE, dwSize = BUFFERSIZE;
while(RegEnumValue( hKey, iCount, aPortName, &dwLong, NULL, NULL, (PUCHAR)aComName, &dwSize ) != ERROR_NO_MORE_ITEMS)
{
dwLong = dwSize = BUFFERSIZE;
if (iCount == 0)
{
szFirstItemOfComPort = aComName;
}
cComboBox.AddString(aComName);
++iCount;
}
RegCloseKey(hKey);
}
return (iCount);
}