您的位置:首页 > 其它

枚举系统中的串口

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: