<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Windows下獲取設備管理器列表信息-setupAPI

      背景及問題:

      在與硬件打交道時,經常需要知道當前設備連接的硬件信息,以便連接正確的硬件,比如串口通訊查詢連接的硬件及端口,一般手工的方式就是去設備管理器查看相應的信息,應用程序如何讀取這一部分信息呢,Windows下的SetupAPI系列就可以解決這個問題

      示例程序

      #include<Windows.h>
      #include<SetupAPI.h>
      #include<iostream>
      #include<string>
      #pragma comment(lib, "setupapi.lib")
      
      int main()
      {
      	//set chinese character
      	std::locale::global(std::locale(""));
      
      	//The SetupDiGetClassDevs function returns a handle to a device 
          //information set that contains requested device information 
          //elements for a local computer.
      	HDEVINFO hdevinfo = SetupDiGetClassDevs(NULL,
      		NULL, NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES);
      	if (hdevinfo != INVALID_HANDLE_VALUE)
      	{
      		DWORD MemberIndex = 0;
      		SP_DEVINFO_DATA sp_devinfo_data;
      		ZeroMemory(&sp_devinfo_data, sizeof(sp_devinfo_data));
      		sp_devinfo_data.cbSize = sizeof(sp_devinfo_data);
      
              //The SetupDiEnumDeviceInfo function returns a SP_DEVINFO_DATA 
              //structure that specifies a device information element in a 
              //device information set.
      		while (SetupDiEnumDeviceInfo(hdevinfo, MemberIndex, &sp_devinfo_data))
      		{
      			TCHAR PropertyBuffer[100];
      
              	//The SetupDiGetDeviceRegistryProperty function retrieves
      			//a specified Plug and Play device property.    
      			if (SetupDiGetDeviceRegistryProperty(hdevinfo,
      				&sp_devinfo_data,
      				SPDRP_DEVICEDESC,
      				NULL,
      				(PBYTE)&PropertyBuffer,
      				sizeof(PropertyBuffer),
      				NULL))
      			{
      
      				std::wcout << MemberIndex << ":" << (wchar_t*)PropertyBuffer << std::endl;
      
      			}
      			MemberIndex++;
      
      		}
      
      	}
      	return 0;
      }
      

      解釋

      主要是3個API的使用
      1. SetupDiGetClassDevs -->獲取設備信息的集合
      2. SetupDiEnumDeviceInfo -->針對具體的設備解析信息
      3. SetupDiGetDeviceRegistryProperty -->提取具體設備的感興趣信息

      其中SetupDiGetClassDevs定義如下

      WINSETUPAPI HDEVINFO SetupDiGetClassDevsW(
        [in, optional] const GUID *ClassGuid,
        [in, optional] PCWSTR     Enumerator,
        [in, optional] HWND       hwndParent,
        [in]           DWORD      Flags
      );
      
      Parameter Description
      [in, optional]const GUID *ClassGuid 指向設備設置類或設備接口GUID的指針。可為NULL(可選)
      [in, optional] PCWSTR Enumerator 指定設備種類。可為NULL(可選)
      [in, optional] HWND hwndParent 顯示設備信息UI界面窗口句柄。可為NULL(可選)
      [in, optional] DWORD Flags 過濾設備信息標志位
      返回值HDEVINFO 返回設備信息的集合
      程序中前三個均設置為NULL,第四個標志位設為DIGCF_PRESENT|DIGCF_ALLCLASSES,表示當前系統已安裝的所有設備,還有一些標志參見

      MSDN頁面-SetupDiGetClassDevsW

      拿到設備信息集合之后,使用SetupDiEnumDeviceInfo進行單個設備信息的解析

      WINSETUPAPI BOOL SetupDiEnumDeviceInfo(
        [in]  HDEVINFO         DeviceInfoSet,
        [in]  DWORD            MemberIndex,
        [out] PSP_DEVINFO_DATA DeviceInfoData
      );
      
      Parameter Description
      [in] HDEVINFO DeviceInfoSet 設備信息集合句柄
      [in] DWORD MemberIndex 集合中第幾個設備
      [out] PSP_DEVINFO_DATA DeviceInfoData 具體的設備信息數據
      拿到單個設備的信息之后(仍包含很多信息),使用SetupDiGetDeviceRegistryProperty對感興趣的信息解析
      WINSETUPAPI BOOL SetupDiGetDeviceRegistryPropertyW(
        [in]            HDEVINFO         DeviceInfoSet,
        [in]            PSP_DEVINFO_DATA DeviceInfoData,
        [in]            DWORD            Property,
        [out, optional] PDWORD           PropertyRegDataType,
        [out, optional] PBYTE            PropertyBuffer,
        [in]            DWORD            PropertyBufferSize,
        [out, optional] PDWORD           RequiredSize
      );
      
      Parameter Description
      [in] HDEVINFO 設備信息集合句柄
      [in] PSP_DEVINFO_DATA DeviceInfoData 具體的設備信息數據
      [in] DWORD Property 設備屬性
      [out, optional] PDWORD PropertyRegDataType 指向接收所檢索屬性的數據類型變量的指針。可為NULL(可選)
      [out, optional] PBYTE PropertyBuffer 指向接收正在檢索的屬性的緩沖區的指針
      [in] DWORD PropertyBufferSize 緩沖區大小
      [out, optional] PDWORD RequiredSize 緩沖區的所需大小。可為NULL(可選)
      程序中設備屬性設置為SPDRP_DEVICEDESC,查詢的是設備名的描述,還有很多屬性參見

      MSDN頁面-SetupDiGetDeviceRegistryPropertyW

      需要注意的是

      • windows API 通常分單雙字節版本,單字節版本一般調用A結尾的API,對應的VS項目屬性中字符集為Multi-Byte,雙字節版本一般調用以w結尾的API,對應VS項目屬性中字符集為Unicode。本例項目屬性為Unicode,對應雙字節字符串版本,所以輸出信息以wcout輸出,緩沖區指針轉換為wchar_t*
      • TCHAR為自動根據項目中字符集屬性轉為char(Multi-Byte)或wchar(Unicode)
      posted @ 2023-12-12 23:14  robot2017  閱讀(1104)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 视频二区中文字幕在线| 章丘市| 99精品国产兔费观看久久99| 国产精品高清国产三级囯产AV| 丝袜高潮流白浆潮喷在线播放| 亚洲色成人一区二区三区人人澡人人妻人人爽人人蜜桃麻豆 | 国产成人av一区二区三| 成人乱人乱一区二区三区| 国产成人人综合亚洲欧美丁香花| 人妻av中文字幕无码专区| 人妻精品久久久无码区色视| 亚洲人妻精品一区二区| 国产拗精品一区二区三区| 中文字幕国产日韩精品| 麻豆亚洲精品一区二区| 中国亚州女人69内射少妇| 99久久精品久久久久久清纯| 国产在线精品中文字幕| 欧美色欧美亚洲高清在线视频| 日日爽日日操| 国产无遮挡又黄又爽免费网站| 成av人片一区二区久久| 精品久久久噜噜噜久久久| 下面一进一出好爽视频| 国产精品日韩中文字幕| 翁源县| 视频一区视频二区视频三| 高清国产美女一级a毛片在线| 亚洲情A成黄在线观看动漫尤物| 日韩不卡一区二区三区四区 | 亚洲欧美人成电影在线观看 | 日本熟妇XXXX潮喷视频| 国产69久久精品成人看| 国产午夜亚洲精品久久| 久久日韩在线观看视频| 色偷偷中文在线天堂中文| 国产在线午夜不卡精品影院| 精品国产乱来一区二区三区| 国产亚洲欧美日韩在线一区| 中文成人无字幕乱码精品区| 丁香五月亚洲综合在线国内自拍 |