您好,登錄后才能下訂單哦!
本篇內容主要講解“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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。