| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3055 人关注过本帖
标题:vc 如何检测出本所有的COM口
取消只看楼主 加入收藏
a315010225
Rank: 2
等 级:论坛游民
帖 子:64
专家分:10
注 册:2009-10-29
结帖率:27.27%
收藏
已结贴  问题点数:20 回复次数:1 
vc 如何检测出本所有的COM口
急急急!
搜索更多相关主题的帖子: COM 检测 
2010-07-16 14:39
a315010225
Rank: 2
等 级:论坛游民
帖 子:64
专家分:10
注 册:2009-10-29
收藏
得分:0 
void CSyst_Setting::CheckComPort()
{
    HKEY hKey;
    DWORD dwCount=0;//保存检索项的结果,即COM端口总数
    DWORD dwBufLen=_MAX_PATH;//缓存大小
   
   
    DWORD dwBufLen1[_MAX_PATH];//缓存大小
    ::FillMemory((LPVOID)dwBufLen1,_MAX_PATH*2,0xFF);
    DWORD dwBufLen2[_MAX_PATH];//缓存大小
    ::FillMemory((LPVOID)dwBufLen2,_MAX_PATH*2,0xFF);
   
   
   
    DWORD dwTp=REG_DWORD;//待检索项的数据类型
   
   
    CString subKey=_T("SYSTEM\\CurrentControlSet\\Services\\serenum\\Enum");
   
   
    if(ERROR_SUCCESS!=::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subKey,
        NULL,KEY_QUERY_VALUE,&hKey))
        return;//打开注册表失败,退出程序
   
   
    //注册表打开成功,进一步检索设备管理器的设备树显示的端口节点里COM口的个数
    if(ERROR_SUCCESS!=::RegQueryValueEx(hKey, _T("Count"), NULL, &dwTp,
        (LPBYTE)&dwCount, &dwBufLen))
    {
        ::RegCloseKey( hKey );
        return;//检索失败,退出
    }
   
    HKEY hKey1;
    CString subKey1=_T("SYSTEM\\CurrentControlSet\\Enum\\");//的COM设备名字检索路径     
    CString strReg;
    CString strACPI(_T('\0'),_MAX_PATH);
    LPSTR lpstrACPI=strACPI.GetBuffer(_MAX_PATH);
   
   
    CString strACPI1(_T('\0'),_MAX_PATH);
    LPSTR lpstrACPI1=strACPI1.GetBuffer(_MAX_PATH);
   
   
    for(unsigned int i=0;i<dwCount;i++)//COM端口数检索成功,进一步检索在设备管理器里出现的文字
    {
        
        strReg.Format("%d",i);
        
        
        if(::RegQueryValueEx(hKey,(LPCSTR)strReg,NULL,
            &dwTp,(LPBYTE)lpstrACPI,&dwBufLen1[i])
            !=ERROR_SUCCESS)
            break;//检索失败,退出
        
        
        subKey1=subKey1+lpstrACPI;
        
        if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subKey1,
            NULL,KEY_QUERY_VALUE,&hKey1)!=ERROR_SUCCESS)   
            break;//打开注册表失败,退出程序
        
        
        DWORD dwTp1=REG_SZ;//此处即为COM的说明文字项数据类型
        if(ERROR_SUCCESS!=::RegQueryValueEx(hKey1, _T("FriendlyName"), NULL, &dwTp1,
            (LPBYTE)lpstrACPI1, &dwBufLen2[i]))//检索COM口具体说明文字,即FriendlyName的值
            break;//检索失败,退出
        
        //-------------------------------
        CString strNum;
        //    strNum =GetStr(lpstrACPI1);
        strNum.Format(_T( "%s "),   lpstrACPI1);
        int i;
        CString shuzi;
        
        for(i=0;i< strNum.GetLength();i++)
        {
            int unicode = (int)strNum.GetAt(i);
            if (unicode <= '9' && unicode >= '0')
            {
                shuzi += strNum.GetAt(i);
            }
            
        }
        shuzi="COM"+shuzi;
        m_intPort.AddString(shuzi);//添加检索的值添加到组合列表框
        m_intPort2.AddString(shuzi);//添加检索的值添加到组合列表框
        
        //---------------------------
        
        //    m_Com1.AddString(lpstrACPI1);//添加检索的值添加到组合列表框
        
        strReg.Empty();//重新对变量赋值,避免前后冲突
        subKey1.Empty();
        subKey1=_T("SYSTEM\\CurrentControlSet\\Enum\\");
        strACPI.Empty();
        strACPI1.Empty();
        strACPI=CString(_T('\0'),_MAX_PATH);
        strACPI1=CString(_T('\0'),_MAX_PATH);      
        
    }
   
   
    strACPI.ReleaseBuffer();
    strACPI1.ReleaseBuffer();
    ::RegCloseKey( hKey1 );
    ::RegCloseKey( hKey );
    m_intPort.SetCurSel(0);
    m_intPort2.SetCurSel(0);

}
2011-01-12 09:44
快速回复:vc 如何检测出本所有的COM口
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026380 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved