串口注册表的自动识别
2014-12-25 13:16
225 查看
Windows串口注册表的自动识别:
打开Windows注册表的方法:
在运行输入“regedit”打开注册表
在主函数中调用的代码:
打开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 long DWORD 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>//用于异步读写的事件句柄
}
相关文章推荐
- VC6.0 自动识别可用串口 添加至combox 并打开
- 自动识别串口号|打开COM9之后的串口|XXX.exe已停止工作|Qt textBrowser滚动条设置到底部
- wins下串口 的自动识别
- 串口DMPL指令刻字机自动识别图形轮廓并刻绘py
- MFC下自动识别串口的实现
- 枚举所有串口,并自动识别硬件变动
- VC6.0 自动识别可用串口 添加至combox 并打开
- 使用VC6.0 自动识别可用串口 添加至combox 并打开。
- MFC自动识别串口
- 使用VC6.0 自动识别可用串口 添加至combox 并打开。
- 自动识别串口号
- VC6.0 自动识别可用串口 添加至combox 并打开
- 内码自动识别简繁体
- HttpClient的简单封装,静态调用,自动识别网页字符集,伪装火狐/IE浏览器
- Python完全识别验证码自动登录
- 在U-boot下实现自动识别启动Flash的原理(针对S3C24x0)
- 基于分割和识别的服饰商品的自动推荐
- 修改注册表实现XP系统自动登录
- 驱动精灵扩展版(集成万能网卡驱动)无法自动识别网卡的解决方案
- python自动截取需要区域,进行图像识别的方法