谢欣伦 - OpenDev原创教程 - 设备查找类CxDeviceFind & CxDeviceMapFind
这是一个精练的设备查找类,类名、函数名和变量名均采用匈牙利命名法。小写的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...
下载
谢欣伦 - OpenDev原创教程 - 设备查找类CxDeviceFind & CxDeviceMapFind的更多相关文章
- 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRadio & CxBthRadioFind
这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRadioFind的使用如下: void CU ...
- 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRemoteDeviceFind
这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRemoteDeviceFind的使用如下: ...
- 谢欣伦 - OpenDev原创教程 - 网络设备查找类CxNetworkHostFind & CxNetworkAdapterFind
这是一个精练的网络设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxNetworkHostFind的使用如下: void ...
- 谢欣伦 - OpenDev原创教程 - 本地IP查找类CxLocalHostIPAddrFind
这是一个精练的本地IP查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxLocalHostIPAddrFind的使用如下: ...
- 谢欣伦 - OpenDev原创教程 - 媒体开发库libMedia
libMedia是一个免费的简单的媒体开发库,其中的接口类与函数大都以小写的x打头,来源于我的姓氏首字母(谢欣伦). 下载 OpenDev for VS2012 libMedia提供四大功能,一是视频 ...
- 谢欣伦 - OpenDev原创教程 - 通信开发库libComm
libComm是一个免费的简单的通信库,其中的接口类与函数大都以小写的x打头,来源于我的姓氏首字母(谢欣伦). 下载 Sample using libComm - v1.1 For WinXP lib ...
- 谢欣伦 - OpenDev原创教程 - 服务端套接字类CxServerSocket
这是一个精练的服务端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxServerSocket的使用如下(以某个叫做CSo ...
- 谢欣伦 - OpenDev原创教程 - 无连接套接字类CxUdpSocket
这是一个精练的无连接套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxUdpSocket的使用如下(以某个叫做CSomeC ...
- 谢欣伦 - OpenDev原创教程 - 串口类CxSerial
这是一个精练的串口类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. 串口类CxSerial的使用如下(以某个叫做CSomeClass ...
随机推荐
- PHP文件包含漏洞攻防实战(allow_url_fopen、open_basedir)
摘要 PHP是一种非常流行的Web开发语言,互联网上的许多Web应用都是利用PHP开发的.而在利用PHP开发的Web应用中,PHP文件包含漏洞是一种常见的漏洞.利用PHP文件包含漏洞入侵网站也是主流的 ...
- C和指针 第九章 字符串 字符 字节
C语言中没有字符串类型,字符串是以NUL结尾的字符数组组成的. 高级字符串查找: //计算字符串起始部分,有多少字符是在group中 size_t strspn(char const * str, c ...
- javascript数据结构-介绍
github博客地址 名词解释 数据结构是计算机存储.组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率.数据结构 ...
- Inode详解
一.inode是什么 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读 ...
- jquery-简单拖拽代码
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- python 多个 %s 例子
input = , ) input 为: '{"a" : 1234, "b" : "14289", "c": " ...
- tomcate端口设定和服务器虚拟目录设定
设定端口和 虚拟目录 在server.xml <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apa ...
- ACM/ICPC 之 网络流-拆点构图(POJ2391)
需要直接到达,因此源点经过三条边后必须要达到汇点,但为了保证网络流的正确性(路径可反悔),因此不可限制层次网络的最高层次为3,最好的方法既是让所有点拆分成两个点,一个点从汇点进入,一个点通向汇点,任意 ...
- MySQL 5.7 mysqlpump 备份工具说明
背景: MySQL5.7之后多了一个备份工具:mysqlpump.它是mysqldump的一个衍生,mysqldump就不多说明了,现在看看mysqlpump到底有了哪些提升,可以查看官方文档,这里针 ...
- javascript实现简单多文件上传
该上传功能主要用到html5新属性FormData,通过XMLHttpRequest对象send到服务器,支持文件多选和多次选择.文件去重.移除已选文件等 1.html代码 <div class ...