USB转串口
隨著USB越來越普及,USB轉串口也越來越流行,怎么知道串口號呢?
?
http://blog.csdn.net/badboyccj/article/details/6718968??
獲取系統串口號 ,然后通過打開文件的方法判斷哪個串口有效
?
| 編寫了一個串口通信的軟件,當時參照“串口調試助手”的源碼編寫的,后來出了兩個問題: 1、我偷懶調用了“串口調試助手”串口通信部分的封裝類,最開始只用com1 ? 和com2是沒什么太大問題,后來由于硬件的需要,裝了一個usb轉串口的東西,安裝以后擴展出來的串口自動識別成com10,或com11,或com12,我就直接在串口號的控件里加入了這幾個串口號,可是一運行就說找不到串口或打不開(在設備管理器中我已經把當前使用的串口號改為我要用的了)。但是改成com7,或com8,或com9也就是 com10以下的都能用,我就很奇怪是不是軟件里的設置有什么問題? 2、這個usb轉串口的東西在不同的電腦上驅動,會擴展成不同的串口號,就是在一臺電腦的不同usb口驅動都會顯示為不同的串口編號,我想知道有什么方法可以讓我在軟件里直接獲取出當前活動的串口號? |
1.串口號大于9必須使用諸如\\.\COM10的形式
2.可以通過查詢注冊表的方式得到。代碼如下:
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下的讀串口號
http://topic.csdn.net/u/20100203/09/185ed7c5-8575-4b64-8a7b-93a1fa5a4c48.html
?
VC串口編程自動加入已經存在的串口號
//FindCommPort,查找注冊表中COM口設置,將其填充進 comboBox中
comboBox是一個下拉列表的控件,程序如下:
void FindCommPort( CComboBox *pComboBox )??
{??
HKEY hKey;
#ifdef _DEBUG??
ASSERT( pComboBox != NULL );
pComboBox->AssertValid();
pComboBox->ResetContent(); //清除現存內容
#endif
//打開注冊表中的串口信息
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);
//枚舉串口并添加進 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);
}
}
?
?
注冊表好像不太準。CreateFile也不一定可靠(如果別的程序已經打開了某個串口)。
?
?
| C/C++ code |
總結
- 上一篇: word vba设置表格样式
- 下一篇: Protues 8.8 SP1 无需破解