佚名通过本文主要向大家介绍了vs2008运行环境,vs2008环境,vs2008开发环境,vs2008环境配置,vs2008环境变量设置等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: VS2008环境下如何获得机器上的COM口
描述:
解决方案1:
描述:
我想在组合框控件中获得机器上的COM口,应该怎么做?
解决方案1:
读注册表,枚举所有的COM口
HKEY hKey;解决方案2:
LPCTSTR data_Set=L"HARDWARE\\DEVICEMAP\\SERIALCOMM\\";
long ret0 ;
ret0= ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set, 0, KEY_READ, &hKey);
DWORD d=GetLastError();
if(ret0!=ERROR_SUCCESS)
return false;
int i = 0;
TCHAR wcname[25];
TCHAR bPortName[25];
memset(wcname,0,50);
memset(bPortName,0,50);
long status;
DWORD dwIndex=0,dwName=0,dwSizeofPortName=0,Type=0;
dwName=30;
dwSizeofPortName=50;
do
{
status=RegEnumValue(hKey,dwIndex++,wcname,&dwName,NULL,&Type,(LPBYTE)bPortName,&dwSizeofPortName);
dwName=30;
dwSizeofPortName=50;
if((status==ERROR_SUCCESS)||(status==ERROR_MORE_DATA))
{
csSerialList[i]=CString(bPortName);
if(!bCVFind)
{
bCVFind=CheckCVMCU(csSerialList[i]);
if(bCVFind)
bFindin /> }
if((!bPWMFind)&&(!bFindinOneTime))
bPWMFind=CheckPWMMCU(csSerialList[i]);
bFindin /> i++;
}
}
while((status==ERROR_SUCCESS)||(status==ERROR_MORE_DATA));
for(int i = 0; i < 16; ++i)
{
m_MSComm.put_CommPort(i); //选择COM3
try{
if(!m_MSComm.get_PortOpen())//如果串口没有打开则打开
m_MSComm.put_PortOpen(TRUE);//打开串口
else
m_MSComm.put_OutBufferCount(0);
}
catch(COleDispatchException* pE)
{
pE->Delete();
::MessageBox(m_hWnd,_T("打开COM错误"),_T("严重错误"),MB_OK|MB_ICONERROR);
}
}