BCB版的串口枚举2
2018-02-02 11:34
483 查看
又无意中看到 MFC实现的串口通信助手 中的一段枚举串口代码,拿过来几乎不改动就可以在bcb6.0里运行了,可是会显示个Com0 出来,断点测试原程序有个小bug,见如下:
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
BOOL bGetVer = GetVersionEx(&osvi);
if(bGetVer && (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT))
{
//Use QueryDosDevice to look for all devices of the form COMx. This is a better
//solution as it means that no ports have to be opened at all.
TCHAR szDevices[65535];
DWORD dwChars = QueryDosDevice(NULL, szDevices, 65535);
if(dwChars)
{
int i=0;
for(;;)
{
//Get the current device name
TCHAR *pszCurrentDevice = &szDevices[i];
//If it looks like "COMX" then
//add it to the array which will be returned
int nLen = _tcslen(pszCurrentDevice);
if(nLen > 3 && _tcsnicmp(pszCurrentDevice, _T("COM"), 3) == 0)
{
//Work out the port number
int nPort = _ttoi(&pszCurrentDevice[3]);
if(nPort>0)//原本这里不判断nPort会有bug,误把"CompositBarterry"匹配进来
Memo1->Lines->Add("COM"+String(nPort));
//ports.Add(nPort);
}
// Go to next NULL character
while(szDevices[i] != _T('\0'))
i++;
// Bump pointer to the next string
i++;
// The list is double-NULL terminated, so if the character is
// now NULL, we're at the end
if(szDevices[i] == _T('\0'))
break;
}
}
//else
// TRACE(_T("Failed in call to QueryDosDevice, GetLastError:%d\n"), GetLastError());
}
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
BOOL bGetVer = GetVersionEx(&osvi);
if(bGetVer && (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT))
{
//Use QueryDosDevice to look for all devices of the form COMx. This is a better
//solution as it means that no ports have to be opened at all.
TCHAR szDevices[65535];
DWORD dwChars = QueryDosDevice(NULL, szDevices, 65535);
if(dwChars)
{
int i=0;
for(;;)
{
//Get the current device name
TCHAR *pszCurrentDevice = &szDevices[i];
//If it looks like "COMX" then
//add it to the array which will be returned
int nLen = _tcslen(pszCurrentDevice);
if(nLen > 3 && _tcsnicmp(pszCurrentDevice, _T("COM"), 3) == 0)
{
//Work out the port number
int nPort = _ttoi(&pszCurrentDevice[3]);
if(nPort>0)//原本这里不判断nPort会有bug,误把"CompositBarterry"匹配进来
Memo1->Lines->Add("COM"+String(nPort));
//ports.Add(nPort);
}
// Go to next NULL character
while(szDevices[i] != _T('\0'))
i++;
// Bump pointer to the next string
i++;
// The list is double-NULL terminated, so if the character is
// now NULL, we're at the end
if(szDevices[i] == _T('\0'))
break;
}
}
//else
// TRACE(_T("Failed in call to QueryDosDevice, GetLastError:%d\n"), GetLastError());
}
相关文章推荐
- BCB版的串口枚举
- 枚举本机串口
- 枚举可用串口号的动态链接库文件
- 枚举串口四法 - franksunny的个人技术空间 - C++博客
- BCB 串口调试经验
- 枚举计算机的串口函数
- 枚举串口四法
- windows driver 枚举串口
- BCB运行期取得Enum(枚举)类型信息
- 发个枚举系统串口的方法(XP已经过实验),环境为VS2008
- VC中的一段枚举串口代码
- 通过查询注册表,枚举所有串口,并加载到下拉列表中
- MFC注册表枚举串口
- 枚举windows串口(1)
- 枚举系统中的串口
- 枚举系统的串口
- windows driver 枚举串口
- VC枚举电脑上可用串口
- 串口编程-枚举遍历串口、获取PC所有串口名称、遍历注册表项、RegEnumValue用法
- 枚举串口