我有一个通过 USB 连接的二维码扫描仪。自然,它的供应商 ID 和产品 ID 是已知的。有了这些数据,如何识别要监听的端口?我尝试使用 LibUsbDotNet 库,但我不知道如何使用它。我可以通过以下方式获得有关已连接键盘的信息,但我完全不知道下一步该做什么。
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Keyboard");
ManagementObjectCollection keyboards = searcher.Get();
foreach (ManagementObject queryObj in keyboards)
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_Keyboard instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("Availability: {0}", queryObj["Availability"]);
Console.WriteLine("Caption: {0}", queryObj["Caption"]);
Console.WriteLine("ConfigManagerErrorCode: {0}", queryObj["ConfigManagerErrorCode"]);
Console.WriteLine("ConfigManagerUserConfig: {0}", queryObj["ConfigManagerUserConfig"]);
Console.WriteLine("CreationClassName: {0}", queryObj["CreationClassName"]);
Console.WriteLine("Description: {0}", queryObj["Description"]);
Console.WriteLine("DeviceID: {0}", queryObj["DeviceID"]);
Console.WriteLine("ErrorCleared: {0}", queryObj["ErrorCleared"]);
Console.WriteLine("ErrorDescription: {0}", queryObj["ErrorDescription"]);
Console.WriteLine("InstallDate: {0}", queryObj["InstallDate"]);
Console.WriteLine("IsLocked: {0}", queryObj["IsLocked"]);
Console.WriteLine("LastErrorCode: {0}", queryObj["LastErrorCode"]);
Console.WriteLine("Layout: {0}", queryObj["Layout"]);
Console.WriteLine("Name: {0}", queryObj["Name"]);
Console.WriteLine("NumberOfFunctionKeys: {0}", queryObj["NumberOfFunctionKeys"]);
Console.WriteLine("Password: {0}", queryObj["Password"]);
Console.WriteLine("PNPDeviceID: {0}", queryObj["PNPDeviceID"]);
if (queryObj["PowerManagementCapabilities"] == null)
Console.WriteLine("PowerManagementCapabilities: {0}", queryObj["PowerManagementCapabilities"]);
else
{
UInt16[] arrPowerManagementCapabilities = (UInt16[])(queryObj["PowerManagementCapabilities"]);
foreach (UInt16 arrValue in arrPowerManagementCapabilities)
{
Console.WriteLine("PowerManagementCapabilities: {0}", arrValue);
}
}
Console.WriteLine("PowerManagementSupported: {0}", queryObj["PowerManagementSupported"]);
Console.WriteLine("Status: {0}", queryObj["Status"]);
Console.WriteLine("StatusInfo: {0}", queryObj["StatusInfo"]);
Console.WriteLine("SystemCreationClassName: {0}", queryObj["SystemCreationClassName"]);
Console.WriteLine("SystemName: {0}", queryObj["SystemName"]);
}
Console.ReadKey();
对于在键盘模拟模式下运行的扫描仪,将输入与特定设备隔离的唯一方法是使用Raw Input。
例子:
注意:代码是为 32 位应用程序量身定制的。
在这种情况下,设备名称将如下所示
\\?\ACPI#PNP0303#0#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}。\\?\您对和之间的部分感兴趣{...},这是一个稍作修改的设备实例 ID(WMI 中的 PnpDeviceID)。