串口編程-枚舉遍歷串口、獲取PC所有串口名稱、遍歷注冊表項、RegEnumValue用法


在網上找了幾個關於遍歷串口的例子,要么代碼不完整,要么就有Bug,如讀不了串口號大於10以上的。 
經過本人的整理,現分享最終代碼,vs2008下編譯通過。 

//此方法同樣適用於遍歷windows開機啟動項,只需稍加修改即可. 

void CEnumPortDlg::enumPort(void) 
{ 

HKEY hKey; 
LPCTSTR lpSubKey="HARDWARE\\DEVICEMAP\\SERIALCOMM\\"; 

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ, &hKey)!= ERROR_SUCCESS) 
{ 
  return ; 
} 
#define NAME_LEN 100 

char szValueName[NAME_LEN]; 
BYTE szPortName[NAME_LEN]; 
LONG status; 
DWORD dwIndex = 0; 
DWORD dwSizeValueName=100; 
DWORD dwSizeofPortName=100; 
DWORD Type; 
dwSizeValueName = NAME_LEN; 
dwSizeofPortName = NAME_LEN; 
do 
{ 
  status = RegEnumValue(hKey, dwIndex++, szValueName, &dwSizeValueName, NULL, &Type, 
   szPortName, &dwSizeofPortName); 
  if((status == ERROR_SUCCESS)) 
  { 
   m_lstPort.AddString((char *)szPortName); 
   
  } 
  //每讀取一次dwSizeValueName和dwSizeofPortName都會被修改 
  //注意一定要重置,否則會出現很離奇的錯誤,本人就試過因沒有重置,出現讀不了COM大於10以上的串口 
  dwSizeValueName = NAME_LEN; 
  dwSizeofPortName = NAME_LEN; 
} while((status!= ERROR_NO_MORE_ITEMS)); 
RegCloseKey(hKey); 

} 

  

轉自: http://www.gzzsc.net


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM