这是一个精练的设备查找类,类名、函数名和变量名均采用匈牙利命名法。小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合。

CxDeviceFind的使用如下:

void CUsbScannerDlg::SearchDevice(LPGUID lpguidDev)
{
m_list1.ResetContent(); HANDLE hDevice;
TCHAR szPath[MAX_PATH] = {};
GUID guidCls;
CxDeviceFind finder;
BOOL bRet = finder.FindDevice(lpguidDev);
while (bRet)
{
finder.GetDevicePath(szPath);
m_list1.AddString(szPath); hDevice = CreateFile(szPath, GENERIC_READ | GENERIC_WRITE, ,
NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if (hDevice != INVALID_HANDLE_VALUE)
{
CloseHandle(hDevice);
m_list1.AddString(_T("Can be open"));
}
else
m_list1.AddString(_T("Can not be open")); finder.GetDeviceFriendlyName(szPath);
m_list1.AddString(szPath); finder.GetDeviceLocationInfo(szPath);
m_list1.AddString(szPath); finder.GetDeviceDescription(szPath);
m_list1.AddString(szPath); finder.GetDeviceHardwareID(szPath);
m_list1.AddString(szPath); finder.GetDeviceInstanceID(szPath);
m_list1.AddString(szPath); finder.GetClassGuid(&guidCls);
sprintf(szPath, "guid_cls[%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x]",
guidCls.Data1, guidCls.Data2, guidCls.Data3,
guidCls.Data4[], guidCls.Data4[], guidCls.Data4[], guidCls.Data4[],
guidCls.Data4[], guidCls.Data4[], guidCls.Data4[], guidCls.Data4[]);
m_list1.AddString(szPath); m_list1.AddString("");
m_list1.AddString("-->Next<--");
bRet = finder.FindNextDevice();
}
finder.Close();
}

然后在需要的地方调用此函数,例如:

void CUsbScannerDlg::OnBtnUsb()
{
// TODO: Add your control notification handler code here
GUID guid = GUID_DEVINTERFACE_USB_DEVICE;
SearchDevice(&guid);
}

其中 GUID guid 可以是以下多种设备类型的GUID
GUID_DEVINTERFACE_USB_DEVICE

GUID_DEVINTERFACE_COMPORT

GUID_DEVINTERFACE_PARALLEL

GUID_BTHPORT_DEVICE_INTERFACE

等等,更多设备类型的GUID可参见MSDN。

CxDeviceMapFind的使用如下:

int xApi::GetInstalledSerialPort(LPBYTE lpbtPort, int nMaxCount)
{
int nPrefixLen = lstrlen(_T("COM")), nSerialPort, i = , j = ;
TCHAR szPath[MAX_PATH] = {};
CxDeviceMapFind dev_map_find;
GUID guid = GUID_DEVINTERFACE_COMPORT;
BOOL bRet = dev_map_find.FindDeviceMap(&guid);
while (bRet)
{
dev_map_find.GetDevicePath(szPath);
if (lstrlen(szPath) > nPrefixLen)
{
nSerialPort = _ttoi(&szPath[nPrefixLen]);
if (i < nMaxCount)
lpbtPort[i++] = nSerialPort;
j++;
} bRet = dev_map_find.FindNextDeviceMap();
}
dev_map_find.Close(); return j;
}

然后在需要的地方调用此函数,例如:

void CCaloricControllerDlg::OnDropdownCmbSerial()
{
// TODO: Add your control notification handler code here
m_cmbSerial.ResetContent();
CString str;
BYTE btPort[MAXBYTE];
int nCount = xApi::GetInstalledSerialPort(btPort, MAXBYTE);
m_cmbSerial.ResetContent();
for (int i=; i<nCount; i++)
{
str.Format(_T("COM%d"), (int)btPort[i]);
m_cmbSerial.AddString(str);
}
}

目前CxDeviceMapFind只支持以下GUID

GUID_DEVINTERFACE_COMPORT

GUID_DEVINTERFACE_PARALLEL

  精练的代码不需要过多解释,你们懂的。To be continued...

下载

libComm - v1.2 For WinXP/Win7

谢欣伦 - OpenDev原创教程 - 设备查找类CxDeviceFind & CxDeviceMapFind的更多相关文章

  1. 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRadio & CxBthRadioFind

    这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRadioFind的使用如下: void CU ...

  2. 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRemoteDeviceFind

    这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRemoteDeviceFind的使用如下: ...

  3. 谢欣伦 - OpenDev原创教程 - 网络设备查找类CxNetworkHostFind & CxNetworkAdapterFind

    这是一个精练的网络设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxNetworkHostFind的使用如下: void ...

  4. 谢欣伦 - OpenDev原创教程 - 本地IP查找类CxLocalHostIPAddrFind

    这是一个精练的本地IP查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxLocalHostIPAddrFind的使用如下: ...

  5. 谢欣伦 - OpenDev原创教程 - 媒体开发库libMedia

    libMedia是一个免费的简单的媒体开发库,其中的接口类与函数大都以小写的x打头,来源于我的姓氏首字母(谢欣伦). 下载 OpenDev for VS2012 libMedia提供四大功能,一是视频 ...

  6. 谢欣伦 - OpenDev原创教程 - 通信开发库libComm

    libComm是一个免费的简单的通信库,其中的接口类与函数大都以小写的x打头,来源于我的姓氏首字母(谢欣伦). 下载 Sample using libComm - v1.1 For WinXP lib ...

  7. 谢欣伦 - OpenDev原创教程 - 服务端套接字类CxServerSocket

    这是一个精练的服务端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxServerSocket的使用如下(以某个叫做CSo ...

  8. 谢欣伦 - OpenDev原创教程 - 无连接套接字类CxUdpSocket

    这是一个精练的无连接套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxUdpSocket的使用如下(以某个叫做CSomeC ...

  9. 谢欣伦 - OpenDev原创教程 - 串口类CxSerial

    这是一个精练的串口类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. 串口类CxSerial的使用如下(以某个叫做CSomeClass ...

随机推荐

  1. 支持向量机SVM

    SVM(Support Vector Machine)有监督的机器学习方法,可以做分类也可以做回归.SVM把分类问题转化为寻找分类平面的问题,并通过最大化分类边界点距离分类平面的距离来实现分类. 有好 ...

  2. windows7下php5.4成功安装imageMagick,及解决php imagick常见错误问题。(phpinfo中显示不出来是因为:1.imagick软件本身、php本身、php扩展三方版本要一致,2.需要把CORE_RL_*.dll多个文件放到/php/目录下面)

    windows7下   php5.4成功安装imageMagick . (phpinfo中显示不出来是因为:1.软件本身.php本身.php扩展三方版本要一致,2.需要把CORE_RL_*.dll多个 ...

  3. ubuntu 创建用户

    http://www.jb51.net/article/45848.htm  创建用户

  4. 去掉UITableView多余的空白行分割线

    一.问题描述 在学习和开发中经常会遇到下面的问题,UITableView的UITableViewCell很少或者没有时,但UITableView有很多的空白行分割线.如下图: 如何去掉UITableV ...

  5. 自己总结SVN必知点

    1.只有添加或删除文件,才与xcodeproj文件有关 2.本地新建文件,为未知文件,符号为问号?,添加文件先add为A文件后,再commit         3.删除文件为叹号,右键删除为D,删除本 ...

  6. .NET 泛型

    泛型      泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候.例如,通过 ...

  7. <%#Eval if判断用法

    1.绑定Repeater 基础用法 <%#Eval("RoleID")%> 2.简单判断用法 <td> <%# Convert.ToBoolean(E ...

  8. Git TortoiseGit SSH设置

    Git TortoiseGit SSH设置 http://www.cnblogs.com/ChenRihe/p/Git_TortoiseGit_SSH.html TortoiseGit默认的SSH客户 ...

  9. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  10. 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。

    题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2<=n<=1000),a(2<=a<=1000) 输出: 一个整数. ...