本篇内容主要讲解“C++得到系统活动、可用的串口及名称的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++得到系统活动、可用的串口及名称的方法”吧!
CreateFile方法:
void GetComList_256(CComboBox * CCombox)//获取可用com口支持到256个
{
CString strCom,strComOpen;
int nCom = 0;
int count = 0;
HANDLE hCom;
CCombox->ResetContent();
do
{
nCom++;
strCom.Format("COM%d", nCom);
strComOpen.Format("\\\\.\\COM%d", nCom);
hCom = CreateFile(strComOpen, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if(INVALID_HANDLE_VALUE == hCom )
{
DWORD error=::GetLastError();//取得错误信息
}
else
{
CCombox->AddString( strCom );
count++;
}
CloseHandle(hCom);
} while(nCom<256);
CCombox->SetCurSel(0);
}
*******************************************************************
读取注册表方法:
int GetComList_Reg( CComboBox * CCombox )
{
HKEY hkey;
int result;
int i = 0;
CString strComName;//串口名称
CString strDrName;//串口详细名称
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;
CCombox->ResetContent();
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就是串口名字"COM2"
}
strComName=commName;
strDrName = portName;
// 从右往左边开始查找第一个'\\',获取左边字符串的长度
int len = strDrName.ReverseFind( '\\');
// 获取'\\'左边的字符串
CString strFilePath = strDrName.Left( len+1 );
// 获取'\\'右边的字符串
CString fileName = strDrName.Right(strDrName.GetLength() - len-1);
fileName = strComName + _T(": ")+fileName;
CCombox->AddString(fileName);
i++;
} while ( 1 );
RegCloseKey( hkey );
}
CCombox->SetCurSel(0);
return i;
}
读取后还可以加入到组合框中,可以根据需要加入到数据中
到此,相信大家对“C++得到系统活动、可用的串口及名称的方法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。