zoukankan      html  css  js  c++  java
  • windows枚举串口

    1. 枚举键值

    HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM

    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 }
  • 相关阅读:
    python基础总结一
    python解释器介绍与安装
    09 字符编码
    python 九九乘法表
    08 基本数据类型及内置方法
    07 Python语法入门之流程控制
    06 Python语法入门之与用户交互、运算符
    05 Python语法入门之垃圾回收机制
    04 Python语法入门之基本数据类型
    03 python语法入门之变量
  • 原文地址:https://www.cnblogs.com/javado/p/5666454.html
Copyright © 2011-2022 走看看