gpt4 book ai didi

c++ - 使用VID,PID和SN查找USB端口号

转载 作者:行者123 更新时间:2023-12-02 10:36:05 27 4
gpt4 key购买 nike

我正在寻找ansi c / c++中的示例代码,这些代码将通过其pid / vid / sn#找到USB设备,然后找到相关的端口号。我有多个连接到PC的FTDI USB串行端口,需要通过已知的SN#识别每个端口。我找到的这段代码将显示HWID信息,但是如何使用它来获取电话号码?这是对其中一种设备的以下代码的响应:USB \ VID_0403&PID_6001 \ FTAME7HK
是否有在线教程,其中包含此类代码的示例?

    #include <windows.h> 
#include <ansi_c.h>
#include <Setupapi.h>
#include <devguid.h>
#include <Setupapi.h>
HDEVINFO deviceInfoSet;
GUID *guidDev = (GUID*) &GUID_DEVCLASS_USB;
TCHAR buffer [4000];
DWORD buffersize =4000;
int memberIndex = 0;
main()
{
deviceInfoSet = SetupDiGetClassDevs(guidDev, NULL, NULL, DIGCF_PRESENT | DIGCF_PROFILE);
while (TRUE) {
SP_DEVINFO_DATA deviceInfoData;
ZeroMemory(&deviceInfoData, sizeof(SP_DEVINFO_DATA));
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
if (SetupDiEnumDeviceInfo(deviceInfoSet, memberIndex, &deviceInfoData) == FALSE) {
if (GetLastError() == ERROR_NO_MORE_ITEMS)
{
break;
}
}
DWORD nSize=0 ;
SetupDiGetDeviceInstanceId (deviceInfoSet, &deviceInfoData, buffer, sizeof(buffer), &nSize);
buffer [nSize] ='\0';
printf ("%s\n", buffer);
memberIndex++;
}
if (deviceInfoSet) {
SetupDiDestroyDeviceInfoList(deviceInfoSet);
}
getchar();
return 0;
}

最佳答案

如果要使用友好名称(通常包含带括号的com端口号),则应这样做:

{
wchar_t friendly_name[128];
if (!SetupDiGetDeviceRegistryPropertyW(device_list, &device_data, SPDRP_FRIENDLYNAME, nullptr, reinterpret_cast<PBYTE>(friendly_name), sizeof friendly_name, nullptr))
return;
StringCopyW(buffer, friendly_name);
}

为了获得上述调用的两个参数 device_listdevice_data,我使用以下函数:
void rescan_ports( void )
{
SP_DEVINFO_DATA device_data = { sizeof device_data };
HDEVINFO device_list = SetupDiGetClassDevsW(&GUID_DEVINTERFACE_COMPORT, nullptr, nullptr, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
DWORD error = GetLastError();
if (!device_list && device_list == INVALID_HANDLE_VALUE) return;

bool ended = false;
for( int i = 0; i < 6000 && !ended; i++ ) {
if (SetupDiEnumDeviceInfo(device_list, i, &device_data))
format_and_add_port_detail(device_list, device_data);
else
ended = (GetLastError() == ERROR_NO_MORE_ITEMS);
}

SetupDiDestroyDeviceInfoList(device_list);
}

它和您写的非常相似,除了我的使用 GUID_DEVINTERFACE_COMPORT仅查找串行端口。

关于c++ - 使用VID,PID和SN查找USB端口号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60232863/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com