carcon999のブログ

12年間Y!ブログの記載を移行しました。電子工作関連の記事が多いです。

COMポートの一覧取得ソース(MFC版 VC++)

Win32およびMFCを利用したCOMポートの一覧取得の例が以下。
個人的には、今はこちらの方がまだ理解し易い。

/////////////////////////////////////////////////////////////////////////
// COMポート番号一覧取得
// Win32版(一部MFC利用)
/////////////////////////////////////////////////////////////////////////
HKEY hKey = NULL;
DWORD dwCount = 0;
TCHAR cNameBuff[256];
BYTE byValueBuff[256];
DWORD dwNameBuffSize = 0;
DWORD dwValueBuffSize = 0;
DWORD dwType = 0;

CStringArray strArray;
int i;

/////////////////////////////////////////////////////////////////////////
// COMポートの情報が存在するキーを得る
/////////////////////////////////////////////////////////////////////////
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("HARDWARE\\DEVICEMAP\\SERIALCOMM" ), 0, KEY_READ, &hKey) != ERROR_SUCCESS){
goto EXIT;
}

/////////////////////////////////////////////////////////////////////////
// 要素数を得る。
/////////////////////////////////////////////////////////////////////////
if(RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwCount, NULL, NULL, NULL, NULL) != ERROR_SUCCESS ){
goto EXIT;
}

/////////////////////////////////////////////////////////////////////////
// 要素数分を繰り返す。
/////////////////////////////////////////////////////////////////////////
for(i = 0 ; i < (int)dwCount ; i++){

dwNameBuffSize = sizeof(cNameBuff);
dwValueBuffSize = sizeof(byValueBuff);

// 一覧を取り出す
if(RegEnumValue(hKey, i, &cNameBuff[0], &dwNameBuffSize, NULL, &dwType, &byValueBuff[0], &dwValueBuffSize) != ERROR_SUCCESS ){
goto EXIT;
}

// 名称で文字列配列を作成する。
strArray.Add(byValueBuff);
}