这是一个精练的设备查找类,类名、函数名和变量名均采用匈牙利命名法。小写的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. multipart/form-data和application/x-www-form-urlencoded的区别

    在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型. 下边是说明:  application/x-www-form-urle ...

  2. Alpha版本十天冲刺——Day 5

    站立式会议 会前小侃:今天是双11,也是恰逢组内秋鑫同学生日,本组同学祝他双11生日快乐.天气好冷,注意保暖. 会议总结 队员 今天完成 遇到的问题 明天要做 感想 鲍亮 json数据解析学习,完成注 ...

  3. Java总结篇系列:Java多线程(一)

    多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程 ...

  4. MongoDB C Driver使用教程

    MongoDB C Driver使用教程 转载请注明出处http://www.cnblogs.com/oloroso/ 本指南提供简介 MongoDB C 驱动程序. 在 C API 的详细信息,请参 ...

  5. mysql开启远程连接

    修改my.ini 去掉 bind-address 127.0.0.1 或添加 bind-address 0.0.0.0 mysql -u root -p 进入mysql,执行 '; 然后 flush ...

  6. mapReduce编程之Recommender System

    1 协同过滤算法 协同过滤算法是现在推荐系统的一种常用算法.分为user-CF和item-CF. 本文的电影推荐系统使用的是item-CF,主要是由于用户数远远大于电影数,构建矩阵的代价更小:另外,电 ...

  7. git workflow

    1) fork map-matcher.git repo 2) add ssh-keygen public key to gitlab 3) clone repo git clone git@git. ...

  8. iOS9 新功能:Support Universal Links

    先看官方文档:https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalL ...

  9. sublime text3 输入中文的解决方法

    1. 下载我们需要的文件,打开终端 ,输入: git clone https://github.com/lyfeyaj/sublime-text-imfix.git 2. 将下载的文件解压之后,移到当 ...

  10. .Net自带缓存Cache的使用

    对于数据比较大,经常要从数据库拿出来用的,可以考虑使用.Net自带的缓存Cache,简单好用: //向内存中插入一个缓存 System.Web.HttpRuntime.Cache.Insert(&qu ...