|
发表于 2015-7-20 16:25:03
|
显示全部楼层
本帖最后由 gujiamao_love 于 2015-7-20 16:27 编辑
通过注册表可以的。我之前实现过。
我用的是CVI,但是c函数都是一样的。
void port_refresh(void)
{
int com;
int i,size1,size2;
int type;
unsigned int values; // 子键个数
char valueName[MAX_PATH];
const char *arr_Subkey_Name="HARDWARE\\DEVICEMAP\\SERIALCOMM";
com = 0;
int nitems;
GetNumListItems(panelHandle, PANEL_PORT, &nitems);
// 获取子键个数
RegQueryInfoOnKey(REGKEY_HKLM, arr_Subkey_Name,NULL, &values, NULL, NULL, NULL);
port_num = values;
if(values != nitems) {
DeleteListItem(panelHandle, PANEL_PORT, 0, -1);
if(values > 0) {
for(i = 0; i < values; i++) {
size1 = MAX_PATH;
size2 = 512;
RegEnumerateValue (REGKEY_HKLM, arr_Subkey_Name,i, valueName, &size1, stringbuffer, &size2,&type);
if(( type == _REG_SZ ) && ( size2 > 0 )) {
size1 = FindPattern (valueName, 0, -1, "VCP", 0, 0);
if (size1 > -1) { // 没有找到
//子键名称中含有"VCP"
com_num = get_Port_Number(stringbuffer);
InsertListItem (panelHandle, PANEL_PORT, -1, stringbuffer, i);
//++cnt_test;
}
}
}
} else {
DeleteListItem(panelHandle, PANEL_PORT, 0, -1);
}
}
}
int get_Port_Number(char Device_Name[])
{
int Port_Num,i;
i = Device_Name[3];
Port_Num = i - 0x30;
i = Device_Name[4];
if(i != 0x00) {
Port_Num *= 10;
Port_Num += i - 0x30;
i = Device_Name[5];
if(i != 0x00) {
Port_Num *= 10;
Port_Num += i - 0x30;
}
}
return Port_Num;
}
//部分函数是CVI的,你改成相应MFC的。 |
|