windows枚举串口

1. 枚举键值

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

2. SETUPAPI方式

 1 int EnumPortsWdm()
 2 {
 3     int i, dwDetDataSize;
 4     TCHAR fname[256], locinfo[256];
 5     HDEVINFO hDevInfo;
 6     SP_DEVICE_INTERFACE_DETAIL_DATA* pDetData;
 7     SP_DEVICE_INTERFACE_DATA ifcData;
 8     SP_DEVINFO_DATA devdata;
 9
10     static const GUID ___GUID_CLASS_COMPORT = 11     { 0x86E0D1E0L, 0x8089, 0x11D0, { 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73 } };
12     /*static const GUID ___GUID_CLASS_COMPORT = 13     { 0xAD498944, 0x762F, 0x11D0, { 0x8D, 0xCB, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C } };*/
14
15
16     hDevInfo = SetupDiGetClassDevs( &___GUID_CLASS_COMPORT, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE );
17     if ( hDevInfo == INVALID_HANDLE_VALUE )
18     {
19         return -1;
20     }
21
22     dwDetDataSize = sizeof( SP_DEVICE_INTERFACE_DETAIL_DATA ) + 256;
23     pDetData = ( SP_DEVICE_INTERFACE_DETAIL_DATA* )calloc( 1, dwDetDataSize );
24     if ( !pDetData )
25     {
26         SetupDiDestroyDeviceInfoList( hDevInfo );
27         return -1;
28     }
29
30     ifcData.cbSize = sizeof( SP_DEVICE_INTERFACE_DATA );
31     pDetData->cbSize = sizeof( SP_DEVICE_INTERFACE_DETAIL_DATA );
32
33     for ( i = 0; SetupDiEnumDeviceInterfaces( hDevInfo, NULL, &___GUID_CLASS_COMPORT, i, &ifcData ); i ++ )
34     {
35         memset( &devdata, 0, sizeof( SP_DEVINFO_DATA ) );
36         devdata.cbSize = sizeof( SP_DEVINFO_DATA );
37
38         if ( !SetupDiGetDeviceInterfaceDetail( hDevInfo, &ifcData, pDetData, dwDetDataSize, NULL, &devdata ) )
39         {
40             break;
41         }
42
43         MessageBox( NULL, pDetData->DevicePath, TEXT( "PATH" ), MB_OK );
44         if ( SetupDiGetDeviceRegistryProperty( hDevInfo, &devdata, SPDRP_FRIENDLYNAME, NULL, ( PBYTE )fname, sizeof( fname ), NULL ) )
45         {
46             MessageBox( NULL, fname, TEXT( "NAME" ), MB_OK );
47         }
48
49         if ( SetupDiGetDeviceRegistryProperty( hDevInfo, &devdata, SPDRP_LOCATION_INFORMATION, NULL, ( PBYTE )locinfo, sizeof( locinfo ), NULL ) )
50         {
51             if ( StrCmpN( locinfo, TEXT( "USB" ), 3 ) == 0 )
52             {
53                 MessageBox( NULL, TEXT( "USB" ), TEXT( "TYPE" ), MB_OK );
54             }
55         }
56     }
57
58     free( pDetData );
59     SetupDiDestroyDeviceInfoList( hDevInfo );
60     return 0;
61 }
时间: 2024-10-12 13:27:52

windows枚举串口的相关文章

Windows自动识别串口的实现

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">* Windows自动识别串口的实现,以下是基于MFC开发的,以下所说都是建立在串口注册表上说的</span> *实现Windows系统下自动识别串口需要调用三个Windows API函数,它们是: //主要用于打开串口 1. LONG RegOpenKeyEx( <s

Windows API串口编程

在Windows系统中实现串口通信的基本功能,并对有关的API函数进行解释. 打开串口函数: HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile

C# RFID windows 服务 串口方式

话说RFID以前很火所以整理一下一年前自己处理的RFID程序,放源码. 一开始觉得他是个很神奇的东西. 包含串口通讯和网络通讯. 由于网络通讯设备太贵,所以国内的设备基本上都是在外置一个比较便宜的模块在里面. 本案例应该适用于大多数的RFID模块. 首先我们先放上RFID API:如下 + ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

windows 枚举所有进程 WtsApi32 windows终端服务

1 #include <WtsApi32.h> 2 #pragma comment(lib, "WtsApi32.lib") 3 void fun17(int argc, char *argv[]){ 4 ////计算机名 5 //TCHAR szServerName[32] = TEXT("DESKTOP-45J0D6P"); 6 ////把这台计算机当服务打开 7 //HANDLE hWtsServer = WTSOpenServer(szServe

使用Windows API进行串口编程

串口通信一般分为四大步:打开串口->配置串口->读写串口->关闭串口,还可以在串口上监听读写等事件. 1.打开和关闭串口 Windows中串口是作为文件来处理的,调用CreateFile()函数可以打开串口,函数执行成功返回串口句柄,出错返回INVALID_HANDLE_VALUE. HANDLE WINAPI CreateFile( _In_ LPCTSTR lpFileName,//要打开或创建的文件名 _In_ DWORD dwDesiredAccess,//访问类型 _In_ D

发布 Victor 串口控件 1.5.0.6 VCL for C++ Builder 6.0

Victor 串口控件 1.5.0.6 VCL BCB6/BCB5 版本更新的内容: ? 和新版 BCB 的控件同步更新,BCB6 版本和新版 C++ Builder 控件只是 UNICODE/ANSI 编码的不同,BCB5 版本的修改会多一些:  ? 抛弃原先的 yb_base_c6 组件包,采用 Windows 2000 之后的新的方法.    yb_base_c6 组件包采用的是 Windows 9x 或更早期的设计思路,新版控件是使用的 Windows 2000 之后的设计思路,   

通过编写串口助手工具学习MFC过程&mdash;&mdash;(八)遇到的一些问题

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (八)遇到的一些问题 本例中用到的控件就介绍完了,本节是在本例过程中遇到的

CaysnPrinter开发包接口说明文档 - PrinterLibs For Windows

CaysnPrinter开发包及接口说明文档下载地址: http://download.csdn.net/download/caysnprinter/9536461 打印机接口说明 一 概述 3 二 函数说明 4 Port Function 4 Port_OpenCom 4 Port_OpenTcp 6 Port_OpenUsb 7 Port_OpenLpt 8 Port_OpenPrn 9 Port_CloseCom 10 Port_CloseTcp 11 Port_CloseUsb 12 P

更新 Victor 串口控件详细说明 / Victor 串口控件 / C++ Builder 串口控件 / VCL 串口控件 / FMX 串口控件 / Firemonkey 串口控件 / BCB 串口控件

Victor 串口控件详细说明 类/函数 头文件 说明 TYbCommDevice Vcl.YbCommDevice.hFmx.YbCommDevice.h 串口控件 TVictorComm Vcl.VictorComm.hFmx.VictorComm.h 多线程的串口类 TCommQueue Vcl.VictorComm.hFmx.VictorComm.h 串口数据队列 (串口 FIFO 缓存) EVictorCommError Vcl.VictorComm.hFmx.VictorComm.h