vector<string> getCommPort()
{
HKEY hkey;
LPCTSTR path="HARDWARE\\DEVICEMAP\\SERIALCOMM\\";
LONG ret=0;
vector<string> ports;
ret=::RegOpenKeyEx(HKEY_LOCAL_MACHINE,path,0,KEY_READ,&hkey);
if(ret!=ERROR_SUCCESS) return ports;
int i=0;
TCHAR name[256];
UCHAR szPortName[256];
DWORD dwindex=0;
DWORD dwname;
DWORD dwsizeofPortName;
DWORD type;
do
{
dwname=sizeof(name);
dwsizeofPortName=sizeof(szPortName);
ret=RegEnumValue(hkey,dwindex++,name,&dwname,NULL,&type,szPortName,&dwsizeofPortName);
if(ret==ERROR_SUCCESS)
{
TCHAR tchartmp[256];
memset(tchar,0,sizeof(tchartmp));
for(int j=0,k=0;j!=dwsizeofPortName;++j)
{
if(szPortName[j]!='\0')
{
tchartmp[k]=szPortName[j];
++k;
}
}
ports.push_back(string(tchartmp);
++i;
}
else break;
}
while(1);
RegCloseKey(hkey);
sort(ports.begin(),ports.end());
return ports;
}
C#
string[] ports=SerialPort.GetPortNames();
Array.Sort(ports);
方法是从网上归纳出来的。