自动获取串口号?

myrosers 2007-05-09 03:34:57
编写了一个串口通信的软件,当时参照“串口调试助手”的源码编写的,后来出了两个问题:
1、我偷懒调用了“串口调试助手”串口通信部分的封装类,最开始只用com1 和com2是没什么太大问题,后来由于硬件的需要,装了一个usb转串口的东西,安装以后扩展出来的串口自动识别成com10,或com11,或com12,我就直接在串口号的控件里加入了这几个串口号,可是一运行就说找不到串口或打不开(在设备管理器中我已经把当前使用的串口号改为我要用的了)。但是改成com7,或com8,或com9也就是
com10以下的都能用,我就很奇怪是不是软件里的设置有什么问题?
2、这个usb转串口的东西在不同的电脑上驱动,会扩展成不同的串口号,就是在一台电脑的不同usb口驱动都会显示为不同的串口编号,我想知道有什么方法可以让我在软件里直接获取出当前活动的串口号?
...全文
1746 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
myrosers 2007-05-15
  • 打赏
  • 举报
回复
非常感谢,回去试试阿!
jjiaming 2007-05-09
  • 打赏
  • 举报
回复
1.串口号大于9必须使用诸如\\.\COM10的形式
2.可以通过查询注册表的方式得到。代码如下:

int GetSerialPort(CStringArray& arrCom)
{
arrCom.RemoveAll();

HKEY hkey;
LONG lRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("HARDWARE\\DEVICEMAP\\SERIALCOMM"), NULL, KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_READ, &hkey);
if (lRes == ERROR_SUCCESS)
{
TCHAR tchKey[MAX_PATH];
TCHAR tchValue[20];
DWORD dwIndex = 0;
DWORD dwType = REG_SZ;
while(lRes == ERROR_SUCCESS)
{
DWORD dwCount = MAX_PATH;
DWORD dwVCount = 20;
lRes = RegEnumValue(hkey, dwIndex++, tchKey, &dwCount, NULL, &dwType, (LPBYTE)tchValue, &dwVCount);
if(lRes == ERROR_SUCCESS)
{
if((dwVCount > 0) && (dwCount > 0))
{
arrCom.Add(tchValue);
}
}
}
}
RegCloseKey(hkey);

return arrCom.GetSize();
}

代码不是我写的,不敢保证是正确的


16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧