串口注册表的自动识别
来源:互联网 发布:北京软件退税计算方法 编辑:程序博客网 时间:2024/04/29 18:00
Windows串口注册表的自动识别:
打开Windows注册表的方法:
在运行输入“regedit”打开注册表
struct UartInfo{DWORD UartNum;char UartName[20];};//获取串口列表BOOL EnumComs(struct UartInfo **UartCom, LPDWORD UartComNumber){//LPCTSTR 即const char * *UartComNumber = 0;const char subKey[100] = "HARDWARE\\DEVICEMAP\\SERIALCOMM";HKEY hNewKey;LONG lResult=RegOpenKeyEx( HKEY_LOCAL_MACHINE, subKey, 0, KEY_ALL_ACCESS, &hNewKey); if(lResult != ERROR_SUCCESS) { PrintLog("打开COM注册表失败!!!");return FALSE; }else{PrintLog("打开COM注册表成功!!!");}//DWORD即unsigned longDWORD ValuesNumber;DWORD MaxValueNameLen;DWORD MaxValueLen;CString str;//检索指定的子键下有多少个值项 lResult = RegQueryInfoKey( hNewKey, NULL, NULL, NULL, NULL, NULL, NULL, &ValuesNumber, &MaxValueNameLen, &MaxValueLen, NULL, NULL); if(lResult != ERROR_SUCCESS) { RegCloseKey(hNewKey); PrintLog("检索连接在PC上的串口数量失败!!!"); return FALSE; } else { str.Format("连接在PC上的串口数量是:%ld", ValuesNumber); PrintLog(str);*UartCom =(struct UartInfo *)malloc( ValuesNumber * sizeof(struct UartInfo)); } DWORD index; DWORD uartindex = 0; //CHAR ValueName[MAX_VALUE_NAME]; CHAR ValueName[100]; //DWORD ValueNameSize = MAX_VALUE_NAME; DWORD ValueNameSize; DWORD DataType; BYTE DataBuffer[100] = ""; DWORD DataLen = 100; //LPTSTR 即 char *, LPBYTE即 char * //检索每个值项,获取值名,数据类型,数据 for(index = 0; index < ValuesNumber; index++) { memset(ValueName, 0, sizeof(ValueName)); memset(DataBuffer, 0, sizeof(DataBuffer)); ValueNameSize = 100; DataLen = 100; lResult = RegEnumValue(hNewKey,index,ValueName,&ValueNameSize,NULL, &DataType, DataBuffer, &DataLen); if (lResult == ERROR_SUCCESS ) { switch(DataType) { case REG_NONE: // No value type(0) //PrintLog("DataType: REG_NONE"); break; case REG_SZ://Unicode nul terminated string (1) //PrintLog("DataType: REG_SZ");break; case REG_EXPAND_SZ:// Unicode nul terminated string (2) //PrintLog("DataType: REG_EXPAND_SZ"); break; case REG_BINARY:// Free form binary (3) //PrintLog("DataType: REG_BINARY"); break; case REG_DWORD:// 32-bit number(4) //PrintLog("DataType: REG_DWORD"); break; case REG_MULTI_SZ: // Multiple Unicode strings(7) //PrintLog("DataType: REG_MULTI_SZ"); break; default: //PrintLog("Other DataType!!!"); break; }#if 0 str.Format("值名:%s", ValueName); PrintLog(str); str.Format("值名长度:%ld", ValueNameSize); PrintLog(str); str.Format("数据:%s", DataBuffer); PrintLog(str); str.Format("数据长度:%ld", DataLen); PrintLog(str);#endif memcpy((*UartCom)[uartindex].UartName, DataBuffer, DataLen); (*UartCom)[uartindex].UartNum = ValuesNumber; uartindex++; } else if(lResult == ERROR_NO_MORE_ITEMS) { PrintLog("检索串口完毕!!!"); } else { DWORD dw = GetLastError(); str.Format("检索串口出错: 0x%08x", dw); PrintLog(str); return FALSE; } } *UartComNumber = uartindex; return TRUE;}
{
<span style="white-space:pre"></span>DWORD UartComNumber = 0;struct UartInfo *pUartCom;BOOL bResult;bResult = EnumComs(&pUartCom, &UartComNumber);DWORD index;if(bResult){PrintLog("获取串口列表成功");}else{PrintLog("获取串口列表失败");}for( index= 0;index < UartComNumber; index++) { pCDlg->m_ComboBox.AddString(pUartCom[index].UartName);}if(pUartCom != NULL){free(pUartCom);pUartCom = NULL;}ResetEvent(g_UartEvent);g_UartEvent = CreateEvent( NULL, TRUE, TRUE, NULL);<span style="white-space:pre"></span>//用于异步读写的事件句柄
}
1 0
- 串口注册表的自动识别
- wins下串口 的自动识别
- MFC下自动识别串口的实现
- 自动识别串口号
- MFC自动识别串口
- 从注册表获取所有的串口
- 从注册表获取所有的串口[Windows]
- 串口大师提示找不到串口的解决办法,增加注册表项目。
- 自动识别串口号|打开COM9之后的串口|XXX.exe已停止工作|Qt textBrowser滚动条设置到底部
- 枚举所有串口,并自动识别硬件变动
- 通过注册表枚举串口
- 注册表查看串口列表
- MFC注册表枚举串口
- C#通过注册表列出所有串口的实例
- 注册表的信息读取--获取系统串口数
- 清理注册表中被占用的无效串口号
- PC上从注册表获取当前的所有串口号
- VC++ 动态检测串口的热插拔(二)通过注册表实现
- Myeclipse8.6_for_Spring性能优化…
- wegw
- sphinx使用初级
- springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
- 围观围观
- 串口注册表的自动识别
- Hibernate中createCriteria即QBC查询的详细用法
- 十七周OJ项目之复制函数
- 围观围观
- 处理ScrollView中包含ViewPager,使ViewPager滑动卡顿
- 我去而过问个
- 围观围观
- 【Android知识点精讲】(6)Activity启动模式和窗口导航
- grunt(2)——常用插件