这是一个精练的设备查找类,类名、函数名和变量名均采用匈牙利命名法。小写的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. 微信公共服务平台开发(.Net 的实现)12-------网页授权(上 :更加深入理解OAuth2.0 )

    我们首先来认识一下OAuth协议吧,这个东西很早就听说过,总觉得离我很远(我的项目用不到这些),但是最近不得不学习一下了.我在网上找了一些解释,认为解释的最好的是这样说的(出处:http://hi.b ...

  2. 02第一个OC程序

    一.打开XCode4.6.3,新建项目 二.选择Application下的命名行项目 三.输入项目名称,选择Foundation框架创建项目,点击Next 四.二话不说.点击Run.启动我们创建的项目 ...

  3. python基础三

    多级菜单 多级菜单 可依次选择进入各子菜单 所需新知识点:列表.字典 #!/usr/bin/env python # -*- coding: utf-8 -*- menu = { '北京':{ '海淀 ...

  4. AngularJS常用指令

    一.指令 1.ng-app 定义应用程序的根元素 <div ng-app="app"></div> var app = angular.module('ap ...

  5. Xcode 此证书签发者无效

    1.https://developer.apple.com/certificationauthority/AppleWWDRCA.cer 安装此证书 2.在keychains里选择login,然后点选 ...

  6. HDU 3879 Base Station(最大权闭合子图)

    经典例题,好像说可以转化成maxflow(n,n+m),暂时只可以勉强理解maxflow(n+m,n+m)的做法. 题意:输入n个点,m条边的无向图.点权为负,边权为正,点权为代价,边权为获益,输出最 ...

  7. VIM退出命令

    注意:这些命令前面都有一个冒号: 当编辑完文档,准备退出Vi返回到shell时,能够使用以下几种方法之一. 在命令模式中,连按两次大写字母Z,若当前编辑的文档曾被修改过,则Vi保存该文档后退出,返回到 ...

  8. TableView 隐藏多余的分割线

    - (void)setExtraCellLineHidden: (UITableView *)tableView { UIView *view = [UIView new]; view.backgro ...

  9. LeetCode之100. Same Tree

    ------------------------------------------ 递归比较即可 AC代码: /** * Definition for a binary tree node. * p ...

  10. JS高级程序设计笔记一

    /*设置自定义属性*/ var div=document.querySelector("#div1"); div.setAttribute("title",&q ...