Enumeration Serial Port on Win2K or later

 // Only For Win2000 and XP or later
 // get serial port from HKLMSYSTEMCurrentControlSetServicesserenumEnum
 // get .Count, index from . to .N (String)
 // then get port name from HKLMSYSTEMCurrentControlSetEnum 
const UINT BUFFLEN = 256;
 const TCHAR szcSerenum[] = _TEXT("SYSTEM\CurrentControlSet\Services\serenum\Enum");
 const TCHAR szcPreKey[] = _TEXT("SYSTEM\CurrentControlSet\Enum\");
 HKEY hKey;
 HKEY hSKey;
 TCHAR szKeyBuff[BUFFLEN];
 DWORD dwBuffLen = BUFFLEN;
 DWORD dwKeyVal;   
 ZeroMemory(szKeyBuff, BUFFLEN);
 RegOpenKeyEx(HKEY_LOCAL_MACHINE,
  szcSerenum,
  0,
  KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE | KEY_READ,
  &hKey);
 // get enumration serial port by serenum.sys
 RegQueryValueEx(hKey,
  _TEXT("Count"),
  0,
  0,
  (unsigned char*)&dwKeyVal,
  &dwBuffLen);
 if (dwKeyVal == 0)
 {
  RegCloseKey(hKey);
  return 0;
 }
 for (DWORD i = 0; i < dwKeyVal; i++)
 {
  const TCHAR szcDevPara[] = _TEXT("\Device Parameters");
  TCHAR szInx[256];
  TCHAR szBuff[512];
  TCHAR szPortName[256];
  CString temp;
  _ultot(i,szInx, 10); // base 10 
  dwBuffLen=BUFFLEN;
  RegQueryValueEx(hKey,
   szInx,
   0,
   0,
   (unsigned char*)szKeyBuff,
   &dwBuffLen);
  // open \HKLM\SYSTEMCurrentControlSet\Enum\" + szKeyBuff + \Device Parameters
  _tcscpy(szBuff, szcPreKey);
  _tcscat(szBuff, szKeyBuff);
  _tcscat(szBuff, szcDevPara);
  RegOpenKeyEx(HKEY_LOCAL_MACHINE,
  szBuff,
  0,
  KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE | KEY_READ,
  &hSKey);
  dwBuffLen = 256;
  RegQueryValueEx(hSKey,
   _TEXT("PortName"),
   0,
   0,
   (unsigned char*)szPortName,
   &dwBuffLen);
  m_strPorts.insert(CString(szPortName));
  RegCloseKey(hSKey);
 }
 /* test code
 SET_CSTRING::iterator it;
 for (it = m_strPorts.begin(); it != m_strPorts.end(); it++)
 {
  CString Test(*it);
 }
 */
 RegCloseKey(hKey);
廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: