|
发表于 2009-12-10 20:47:31
|
显示全部楼层
应该是遍历注册表吧,给出一个vc的例子~
// 填充已存在串口名到下拉框
void CCommsetDlg::PopulatePortName()
{
HKEY hkReceived = NULL;
LONG retCode = 0;
DWORD dwCount = 0;
// 打开注册表
retCode = RegOpenKeyEx( HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM", 0, KEY_READ, &hkReceived );
if ( retCode == ERROR_SUCCESS )
{
char lpValueName[41];// = "\\Device\\Serial0";
DWORD dwValueName = 40;
BYTE lpData[21];
DWORD dwData = 20;
DWORD dwType = REG_SZ;
DWORD dwIndex = 0;
while ( ( retCode = RegEnumValue( hkReceived, dwIndex, lpValueName, &dwValueName, NULL, &dwType, lpData, &dwData ) ) != ERROR_NO_MORE_ITEMS )
{
// 查询的结果数据类型为REG_SZ
if ( dwType == REG_SZ )
{
m_cbPortName.AddString( (LPCTSTR) lpData );
dwCount++;
}
dwIndex++;
dwData = 20;
}
RegCloseKey( hkReceived );
}
// 在注册表中没有找到合适的项时添加自定义数据
if ( dwCount == 0 )
{
char *coms[] = { "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8 " };
for ( int index = 0; index < 8; index++ )
{
m_cbPortName.AddString( coms[ index ] );
}
}
} |
|