搜索
bottom↓
回复: 10

怎么通过C#修改串口号

[复制链接]

出0入0汤圆

发表于 2015-12-29 22:42:03 | 显示全部楼层 |阅读模式
如题
比如现在电脑上有串口COM3 怎么用软件修改成COM1

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入76汤圆

发表于 2015-12-29 23:02:43 | 显示全部楼层
连baidu, google都不会?

出0入0汤圆

发表于 2015-12-29 23:53:56 | 显示全部楼层
设备管理器修改的

出0入0汤圆

 楼主| 发表于 2015-12-30 09:18:37 | 显示全部楼层
不通过设备管理器修改
说的通过软件修改
楼上的理解错了
百度过了
没有找到相关资料

出20入26汤圆

发表于 2015-12-30 09:38:02 | 显示全部楼层
你是说,电脑的串口号是COM3,怎样用C#写个软件,在C#程序里面检查,如果不是COM1,就改成COM1?

出0入0汤圆

发表于 2015-12-30 12:47:40 来自手机 | 显示全部楼层
脱裤子放屁,多此一举

出0入0汤圆

发表于 2015-12-30 12:52:51 | 显示全部楼层
通过软件改就没必要了吧,如果你不想让用户自己设置,就把软件做成不管连哪个串口都能使用就行了.

出0入4汤圆

发表于 2015-12-30 12:59:53 | 显示全部楼层
改注册表HKEY_LOCAL_MACHINE\\Hardware\\DeviceMap\\SerialComm有用吗?没有试过。

出0入0汤圆

发表于 2015-12-30 13:19:33 | 显示全部楼层
hyz_avr 发表于 2015-12-30 12:52
通过软件改就没必要了吧,如果你不想让用户自己设置,就把软件做成不管连哪个串口都能使用就行了. ...

c#中如何做到不管连哪个串口都能使用啊?是通过扫描所有串口,然后识别名称,开启端口吗?

出0入0汤圆

发表于 2015-12-30 13:24:25 | 显示全部楼层
fulitun 发表于 2015-12-30 12:59
改注册表HKEY_LOCAL_MACHINE\\Hardware\\DeviceMap\\SerialComm有用吗?没有试过。


这位真的是老司机
新技能GET

出0入0汤圆

发表于 2016-4-12 19:26:47 | 显示全部楼层
河图洛书 发表于 2015-12-30 13:19
c#中如何做到不管连哪个串口都能使用啊?是通过扫描所有串口,然后识别名称,开启端口吗? ...

C#不知道,没玩过。给你贴一段偶14年用VC6写的程序,你参考一下好了:
int CPortSetupDlg::EnumSerial()
{
        BOOL bFound = FALSE;
        HDEVINFO DeviceInfoSet;
        SP_DEVINFO_DATA DeviceInfoData;   
        _TCHAR buffer[MAX__DESC];
  
        /* 获取串口驱动信息的集合 */
        DeviceInfoSet = SetupDiGetClassDevs((LPGUID)&CLASS_GUID_COM_DEV,NULL,NULL,DIGCF_PRESENT);
        if (INVALID_HANDLE_VALUE == DeviceInfoSet){
#ifdef CHINESE
                MessageBox("无法获取串口类信息");
#endif
#ifdef ENGLISH
                MessageBox("Can't get info for serial port class");
#endif
                return -1;
        }

        DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);

        /* 枚举设备 */
        for(int i = 0; SetupDiEnumDeviceInfo(DeviceInfoSet,(DWORD)i,&DeviceInfoData); ++i){
                BOOL  bRet;
                DWORD DataT;
                DWORD dwBufferSize;

                /* 获取设备信息 */
                bRet = SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
                                                        &DeviceInfoData,
                                                        SPDRP_DEVICEDESC,
                                                        &DataT,
                                                        (PBYTE)buffer,
                                                        MAX__DESC,
                                                        &dwBufferSize );
                if (!bRet)
                      continue;

                /* 匹配找到的设备 */
                CString sDeviceDesc = buffer;
                //if ((-1 == sDeviceDesc.Find(COM_DESC))&&(-1 == sDeviceDesc.Find(COM_DESC_NEW)))
                //        continue;

                HKEY  hKeyDev;      
                /* 打开注册表核对 */
                hKeyDev = SetupDiOpenDevRegKey(DeviceInfoSet,&DeviceInfoData,
                                                DICS_FLAG_GLOBAL,0,DIREG_DEV, KEY_READ);
                if (INVALID_HANDLE_VALUE == hKeyDev){
                        (void)SetupDiDestroyDeviceInfoList(DeviceInfoSet);
#ifdef CHINESE
                        MessageBox("查到设备信息与注册表信息不匹配!");
#endif
#ifdef ENGLISH
                        MessageBox("Device info found does not match with registry!");
#endif
                        return -2;
                }

                memset(buffer, 0, MAX__DESC);

                /* 读注册表中的portname键值 */
                if(ERROR_SUCCESS != RegQueryValueEx(hKeyDev, _T("PortName"), NULL, NULL,
                                                (unsigned char*)buffer, (LPDWORD)&dwBufferSize)){
                        (void)SetupDiDestroyDeviceInfoList(DeviceInfoSet);
#ifdef CHINESE
                        MessageBox("未在注册表中查到相关设备信息!");
#endif
#ifdef ENGLISH
                        MessageBox("Related device info was not found in registry!");
#endif
                        return -3;
                }
                sDeviceDesc = buffer;
                if (-1 != sDeviceDesc.Find(_T("COM"))){
                        m_Ports_Avail_Control.AddString(sDeviceDesc);
                        //arrayComPort.Add(atol((char*)&buffer[3]));
                        bFound = TRUE;
                }
        }

        (void)SetupDiDestroyDeviceInfoList(DeviceInfoSet);
        //*
        if(bFound)
        {
                return m_Ports_Avail_Control.GetCount();
        }
        return 0;
        //*/
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 14:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表