Chris_gong 发表于 2015-12-29 22:42:03

怎么通过C#修改串口号

如题
比如现在电脑上有串口COM3 怎么用软件修改成COM1

foxpro2005 发表于 2015-12-29 23:02:43

连baidu, google都不会?

little_Monkey 发表于 2015-12-29 23:53:56

设备管理器修改的

Chris_gong 发表于 2015-12-30 09:18:37

不通过设备管理器修改
说的通过软件修改
楼上的理解错了
百度过了
没有找到相关资料

jufr12315 发表于 2015-12-30 09:38:02

你是说,电脑的串口号是COM3,怎样用C#写个软件,在C#程序里面检查,如果不是COM1,就改成COM1?

sddp001 发表于 2015-12-30 12:47:40

脱裤子放屁,多此一举

hyz_avr 发表于 2015-12-30 12:52:51

通过软件改就没必要了吧,如果你不想让用户自己设置,就把软件做成不管连哪个串口都能使用就行了.

fulitun 发表于 2015-12-30 12:59:53

改注册表HKEY_LOCAL_MACHINE\\Hardware\\DeviceMap\\SerialComm有用吗?没有试过。

河图洛书 发表于 2015-12-30 13:19:33

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

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

ghostxdy 发表于 2015-12-30 13:24:25

fulitun 发表于 2015-12-30 12:59
改注册表HKEY_LOCAL_MACHINE\\Hardware\\DeviceMap\\SerialComm有用吗?没有试过。

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

偶爱自由 发表于 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;

        /* 获取串口驱动信息的集合 */
        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){
                BOOLbRet;
                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;

                HKEYhKeyDev;      
                /* 打开注册表核对 */
                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));
                        bFound = TRUE;
                }
        }

        (void)SetupDiDestroyDeviceInfoList(DeviceInfoSet);
        //*
        if(bFound)
        {
                return m_Ports_Avail_Control.GetCount();
        }
        return 0;
        //*/
}
页: [1]
查看完整版本: 怎么通过C#修改串口号