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;
}
 
讀取後還可以加入到組合框中,可以根據需要加入到數據中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章