Цитата(megajohn @ Apr 21 2014, 15:11)

Хотелось бы заметить, что предложенное решение не совсем то, что просил топик стартер.
Пример поиска порта с нужным именем (на Си):
Код
void uart_list_devices()
{
char name[]="Bluegiga Bluetooth Low Energy";
BYTE* pbuf = NULL;
DWORD reqSize = 0;
DWORD n=0;
HDEVINFO hDevInfo;
//guid for ports
static const GUID guid = { 0x4d36e978, 0xe325, 0x11ce, { 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 } };
char *str;
char tmp[MAX_PATH+1];
int i;
SP_DEVINFO_DATA DeviceInfoData;
snprintf(tmp,MAX_PATH,"%s (COM%%d)",name);
DeviceInfoData.cbSize=sizeof(SP_DEVINFO_DATA);
hDevInfo = SetupDiGetClassDevs(&guid, //Retrieve all ports
0L,
NULL,
DIGCF_PRESENT );
if(hDevInfo==INVALID_HANDLE_VALUE)
return;
while(1)
{
if(!SetupDiEnumDeviceInfo(
hDevInfo,
n++,
&DeviceInfoData
))
{
SetupDiDestroyDeviceInfoList(hDevInfo);
return;
}
reqSize = 0;
SetupDiGetDeviceRegistryPropertyA(hDevInfo, &DeviceInfoData, SPDRP_FRIENDLYNAME, NULL, NULL, 0, &reqSize);
pbuf = (BYTE*)malloc(reqSize>1?reqSize:1);
if (!SetupDiGetDeviceRegistryPropertyA(hDevInfo, &DeviceInfoData, SPDRP_FRIENDLYNAME, NULL, pbuf, reqSize, NULL))
{
free(pbuf);
continue;
}
str = (char*)pbuf;
if(sscanf(str,tmp,&i)==1)
{
printf("%s\n", str);
//emit DeviceFound(str,QString("\\\\.\\COM%1").arg(i));
}
free(pbuf);
}
return;
}