|
发表于 2010-9-19 23:21:35
|
显示全部楼层
int CCONTROLDlg::EnumComport()
{
unsigned int i;
HKEY hKey;
LPCTSTR data_Set="HARDWARE\\DEVICEMAP\\SERIALCOMM\\";
long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKey));
if(ret0 != ERROR_SUCCESS){return -1;}
CHAR Name[25]={0};
UCHAR szPortName[25]={0};
LONG Status={0};
DWORD dwIndex=0;
DWORD dwName={0};
DWORD dwSizeofPortName=sizeof(szPortName);
DWORD Type={0};
dwName = sizeof(Name);
dwSizeofPortName = sizeof(szPortName);
CHAR achClass[MAX_PATH] = ""; // buffer for class name
DWORD cchClassName = MAX_PATH; // length of class string
DWORD cSubKeys; // number of subkeys
DWORD cbMaxSubKey; // longest subkey size
DWORD cchMaxClass; // longest class string
DWORD cValues; // number of values for key
DWORD cchMaxValue; // longest value name
DWORD cbMaxValueData; // longest value data
DWORD cbSecurityDescriptor; // size of security descriptor
FILETIME ftLastWriteTime; // last write time
RegQueryInfoKey(hKey, // key handle
achClass, // buffer for class name
&cchClassName, // length of class string
NULL, // reserved
&cSubKeys, // number of subkeys
&cbMaxSubKey, // longest subkey size
&cchMaxClass, // longest class string
&cValues, // number of values for this key
&cchMaxValue, // longest value name
&cbMaxValueData, // longest value data
&cbSecurityDescriptor, // security descriptor
&ftLastWriteTime); // last write time
for(i=0;i<cValues;i++)
{
Name[0] = '\0';;
dwName = 25;
Status = RegEnumValue (hKey,
i,
Name,
&dwName,
NULL,
&Type,
szPortName,
&dwSizeofPortName );
if((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA))
{
m_Port.AddString(CString(szPortName));
}
}
RegCloseKey(hKey);
int nCount = m_Port.GetCount();
if (nCount > 0)
m_Port.SetCurSel(0);
return i;
} |
|