枚举系统中的串口
2010-02-06 11:29
351 查看
#ifndef EnumPortsEx_H
#define EnumPortsEx_H
//////////////////////////////////////////////////////////////////////////
#include <Windows.h>
#include <Shlwapi.h>
#include <WinSpool.h>
//////////////////////////////////////////////////////////////////////////
#pragma comment(lib, "Shlwapi")
//////////////////////////////////////////////////////////////////////////
template <typename CallbackT>
DWORD EnumPortsEx(CallbackT callback, DWORD dwContext)
{
DWORD dwBufferSize = 0;
DWORD dwReturnSize = 0;
LPBYTE pBuffer = NULL;
PPORT_INFO_1 pPortInfo = NULL;
TCHAR szPortName[128] = { 0 };
SetLastError(ERROR_SUCCESS);
EnumPorts(NULL, 1, NULL, 0, &dwBufferSize, &dwReturnSize);
if (dwBufferSize == 0) {
goto Exit;
}
pBuffer = new BYTE[dwBufferSize];
if (!EnumPorts(NULL, 1, pBuffer, dwBufferSize, &dwBufferSize, &dwReturnSize)) {
goto Exit;
}
pPortInfo = (PPORT_INFO_1) pBuffer;
for (LONG i=0; i<dwReturnSize; ++i) {
LPTSTR pszColon = StrChr(pPortInfo[i].pName, TEXT(':'));
if (pszColon != NULL) {
StrCpyN(szPortName, pPortInfo[i].pName, pszColon - pPortInfo[i].pName + 1);
}
else {
StrCpy(szPortName, pPortInfo[i].pName);
}
callback(szPortName, dwContext);
}
Exit:
delete []pBuffer;
pBuffer = NULL;
pPortInfo = NULL;
return GetLastError();
}
//////////////////////////////////////////////////////////////////////////
#endif
#define EnumPortsEx_H
//////////////////////////////////////////////////////////////////////////
#include <Windows.h>
#include <Shlwapi.h>
#include <WinSpool.h>
//////////////////////////////////////////////////////////////////////////
#pragma comment(lib, "Shlwapi")
//////////////////////////////////////////////////////////////////////////
template <typename CallbackT>
DWORD EnumPortsEx(CallbackT callback, DWORD dwContext)
{
DWORD dwBufferSize = 0;
DWORD dwReturnSize = 0;
LPBYTE pBuffer = NULL;
PPORT_INFO_1 pPortInfo = NULL;
TCHAR szPortName[128] = { 0 };
SetLastError(ERROR_SUCCESS);
EnumPorts(NULL, 1, NULL, 0, &dwBufferSize, &dwReturnSize);
if (dwBufferSize == 0) {
goto Exit;
}
pBuffer = new BYTE[dwBufferSize];
if (!EnumPorts(NULL, 1, pBuffer, dwBufferSize, &dwBufferSize, &dwReturnSize)) {
goto Exit;
}
pPortInfo = (PPORT_INFO_1) pBuffer;
for (LONG i=0; i<dwReturnSize; ++i) {
LPTSTR pszColon = StrChr(pPortInfo[i].pName, TEXT(':'));
if (pszColon != NULL) {
StrCpyN(szPortName, pPortInfo[i].pName, pszColon - pPortInfo[i].pName + 1);
}
else {
StrCpy(szPortName, pPortInfo[i].pName);
}
callback(szPortName, dwContext);
}
Exit:
delete []pBuffer;
pBuffer = NULL;
pPortInfo = NULL;
return GetLastError();
}
//////////////////////////////////////////////////////////////////////////
#endif
相关文章推荐
- 如何枚举系统COM串口
- 发个枚举系统串口的方法(XP已经过实验),环境为VS2008
- 如何枚举系统COM串口
- Windows枚举出系统中所有的串口的9种方法
- 枚举 window 系统串口的几种方法
- 枚举系统的串口
- 枚举当前系统网卡
- 嵌入式系统中如何使用printf函数进行串口输出
- 枚举系统中打开的句柄
- 枚举NT系统用户帐号
- 枚举windows串口(1)
- 枚举windows下的串口(2)
- 嵌入式系统下console,tty,串口的关系
- 嵌入式系统学习——STM32之串口通信UART
- 基于NiosII6.1的SOPC系统连载(2)- 串口实验
- 两种枚举串口的方式
- Linux 系统串口信息查看
- WIN32 API编程--枚举系统显示器
- cc2538在contiki系统的串口数据输…
- BCB版的串口枚举