USB转串口
隨著USB越來越普及,USB轉(zhuǎn)串口也越來越流行,怎么知道串口號(hào)呢?
?
http://blog.csdn.net/badboyccj/article/details/6718968??
獲取系統(tǒng)串口號(hào) ,然后通過打開文件的方法判斷哪個(gè)串口有效
?
| 編寫了一個(gè)串口通信的軟件,當(dāng)時(shí)參照“串口調(diào)試助手”的源碼編寫的,后來出了兩個(gè)問題: 1、我偷懶調(diào)用了“串口調(diào)試助手”串口通信部分的封裝類,最開始只用com1 ? 和com2是沒什么太大問題,后來由于硬件的需要,裝了一個(gè)usb轉(zhuǎn)串口的東西,安裝以后擴(kuò)展出來的串口自動(dòng)識(shí)別成com10,或com11,或com12,我就直接在串口號(hào)的控件里加入了這幾個(gè)串口號(hào),可是一運(yùn)行就說找不到串口或打不開(在設(shè)備管理器中我已經(jīng)把當(dāng)前使用的串口號(hào)改為我要用的了)。但是改成com7,或com8,或com9也就是 com10以下的都能用,我就很奇怪是不是軟件里的設(shè)置有什么問題? 2、這個(gè)usb轉(zhuǎn)串口的東西在不同的電腦上驅(qū)動(dòng),會(huì)擴(kuò)展成不同的串口號(hào),就是在一臺(tái)電腦的不同usb口驅(qū)動(dòng)都會(huì)顯示為不同的串口編號(hào),我想知道有什么方法可以讓我在軟件里直接獲取出當(dāng)前活動(dòng)的串口號(hào)? |
1.串口號(hào)大于9必須使用諸如\\.\COM10的形式
2.可以通過查詢注冊(cè)表的方式得到。代碼如下:
int ? GetSerialPort(CStringArray& ? arrCom)
{
arrCom.RemoveAll();
HKEY ? hkey; ? ?
LONG ? lRes ? = ? RegOpenKeyEx(HKEY_LOCAL_MACHINE, ? _T( "HARDWARE\\DEVICEMAP\\SERIALCOMM "), ? NULL, ? KEY_QUERY_VALUE ? | ? KEY_ENUMERATE_SUB_KEYS ? | ? KEY_READ, ? &hkey); ? ?
if ? (lRes ? == ? ERROR_SUCCESS) ? ?
{
TCHAR ? tchKey[MAX_PATH]; ? ?
TCHAR ? tchValue[20];
DWORD ? dwIndex ? = ? 0;
DWORD ? dwType ? = ? REG_SZ;
while(lRes ? == ? ERROR_SUCCESS)
{
DWORD ? dwCount ? = ? MAX_PATH;
DWORD ? dwVCount ? = ? 20;
lRes ? = ? RegEnumValue(hkey, ? dwIndex++, ? tchKey, ? &dwCount, ? NULL, ? &dwType, ? (LPBYTE)tchValue, ? &dwVCount);
if(lRes ? == ? ERROR_SUCCESS)
{
if((dwVCount ? > ? 0) ? && ? (dwCount ? > ? 0))
{
arrCom.Add(tchValue);
}
}
}
}
RegCloseKey(hkey);
return ? arrCom.GetSize();
}
代碼不是我寫的,不敢保證是正確的
?
dep下的讀串口號(hào)
http://topic.csdn.net/u/20100203/09/185ed7c5-8575-4b64-8a7b-93a1fa5a4c48.html
?
VC串口編程自動(dòng)加入已經(jīng)存在的串口號(hào)
//FindCommPort,查找注冊(cè)表中COM口設(shè)置,將其填充進(jìn) comboBox中
comboBox是一個(gè)下拉列表的控件,程序如下:
void FindCommPort( CComboBox *pComboBox )??
{??
HKEY hKey;
#ifdef _DEBUG??
ASSERT( pComboBox != NULL );
pComboBox->AssertValid();
pComboBox->ResetContent(); //清除現(xiàn)存內(nèi)容
#endif
//打開注冊(cè)表中的串口信息
if( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE,TEXT("Hardware\\DeviceMap\\SerialComm"), NULL, KEY_READ, &hKey) == ERROR_SUCCESS)??
{??
int i=0;
TCHAR portName[256],commName[256];
DWORD dwLong,dwSize;
while(1)
{
dwLong = dwSize = sizeof(portName)/sizeof(TCHAR);
//枚舉串口并添加進(jìn) pComboBox中
if( ::RegEnumValue( hKey, i, portName, &dwLong, NULL, NULL, (PUCHAR)commName, &dwSize ) == ERROR_NO_MORE_ITEMS ) //
break;
pComboBox->AddString( commName );// commName
i++;
}
if( pComboBox->GetCount() == 0 )
{
::AfxMessageBox( TEXT("Cannot Find any available COM port!") );
}
RegCloseKey(hKey);
}
}
?
?
注冊(cè)表好像不太準(zhǔn)。CreateFile也不一定可靠(如果別的程序已經(jīng)打開了某個(gè)串口)。
?
?
| C/C++ code |
總結(jié)
- 上一篇: word vba设置表格样式
- 下一篇: Protues 8.8 SP1 无需破解