我连接的打印机没有驱动程序,并且没有显示在打印机下,但是显示在名称为“ SRP300”的“开始->设置->蓝牙和其他设备”下。
我可以通过以下例程将数据发送到打印机(在此处找到:https://www.levelextreme.com/ViewPageGenericLogin.aspx?LoadContainer=1&NoThread=1157607),在该例程中它获得设备实例ID和Guid-但我根本无法弄清楚我在哪里获得该名称从“ SP300”开始?
一旦我找到它的GUID,我需要调用什么?最好的办法是,如果我可以搜索以该名称开头的名称,并且找到了SP300,则获取实例ID / GUID,但是我尝试了各种枚举方法来枚举显示的名称,但似乎什么都没有产生?
如果我检查注册表,我会看到它分组在USB下,然后在一个名为USBPRINT的文件夹下,然后是一个00000001文件夹,并在其中命名,但是想知道如何通过win api调用检索到它吗? / p>
int test2()
{
int MemberIndex = 0;
LONG Result = 0;
DWORD Length = 0;
HANDLE hDevInfo;
ULONG Required;
HANDLE m_hComm=NULL;
PSP_DEVICE_INTERFACE_DETAIL_DATA detailData = NULL;
SP_DEVICE_INTERFACE_DATA devInfoData;
hDevInfo = SetupDiGetClassDevs((LPGUID)&(USB_PRINT), NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
printf("No hardware device");
return 0;
}
devInfoData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
//Step through the available devices looking for the one we want.
do
{
//[1]
Result = SetupDiEnumDeviceInterfaces(hDevInfo, 0, (LPGUID)&(USB_PRINT), MemberIndex, &devInfoData);
if (Result != 0)
{
SetupDiGetDeviceInterfaceDetail(hDevInfo, &devInfoData, NULL, 0, &Length, NULL);
//Allocate memory for the hDevInfo structure, using the returned Length.
detailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)new BYTE[Length * 4];
//Set cbSize in the detailData structure.
detailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
//Call the function again, this time passing it the returned buffer size.
if (SetupDiGetDeviceInterfaceDetail(hDevInfo, &devInfoData, detailData, Length, &Required, NULL) == TRUE)
{
m_hComm = CreateFile(detailData->DevicePath,
GENERIC_READ | GENERIC_WRITE,
NULL,
NULL,
OPEN_EXISTING, 0, NULL);
if (m_hComm != INVALID_HANDLE_VALUE)
{
//Result = 0;
printf("USB port Available");
}
CloseHandle(m_hComm);
}
delete(detailData);
}
MemberIndex = MemberIndex + 1;
} while (Result != 0);
SetupDiDestroyDeviceInfoList(hDevInfo);
printf("%u\r\n", MemberIndex);
;
return 0;
}
答案 0 :(得分:0)
如果未使用枚举参数值来选择设备,请将Enumerator设置为NULL,并且当Enumerator为NULL时,SetupDiGetClassDevs将为所有PnP枚举器返回设备。您可以将此参数设置为值的全局唯一标识符(GUID)或符号名。
有关更多信息,您可以在下面参考此文档。
https://docs.microsoft.com/en-us/windows/desktop/api/setupapi/nf-setupapi-setupdigetclassdevsw
最好的问候,
毕男爵