来自不同键盘 C# .Net 的 RawInput
RawInput from different Keyboard C# .Net
我正在开发一个 Windows 应从 USB 秤获取数据的表单应用程序。
USB 秤的处理方式类似于键盘。如果有人在体重秤上放东西,体重秤就会像 USB 键盘一样开始输入重量字符串。之前,我通过单击 Forms App 中的文本框,让秤将重量字符串键入文本框。但是现在我需要在不让 Scale 直接写入文本框的情况下获取权重字符串实习生。这样程序就可以在后台处理来自秤的数据。
所以起初我想我必须为输入选择一个设备。 (类似于 Com Port XY 上的 Keyborad)所以我需要创建一个包含所有输入设备的列表。
我如何在 C# .Net 中执行此操作?
我已经试过了:
string[] devices = GetRawInputDeviceList;
textBox1.Text = devices[0];
textBox2.Text = devices[1];
但这不起作用。
也许有人可以告诉我该怎么做?或者你们认为解决我的问题的最佳方法是什么?
请帮忙!
我想通知您,以下代码帮助我解决了问题。
您将需要 Mike O’Brien 的 USB HID 库。您可以在 VisualStudio (NuGet Packages) 或此处下载它:https://github.com/mikeobrien/HidLibrary
using System;
using System.Linq;
using System.Text;
using HidLibrary;
namespace HIDProject
{
class Program
{
private const int VendorId = 0x0801;
private const int ProductId = 0x0002;
private static HidDevice _device;
static void Main()
{
_device = HidDevices.Enumerate(VendorId, ProductId).FirstOrDefault();
if (_device != null)
{
_device.OpenDevice();
_device.Inserted += DeviceAttachedHandler;
_device.Removed += DeviceRemovedHandler;
_device.MonitorDeviceEvents = true;
_device.ReadReport(OnReport);
Console.WriteLine("Reader found, press any key to exit.");
Console.ReadKey();
_device.CloseDevice();
}
else
{
Console.WriteLine("Could not find reader.");
Console.ReadKey();
}
}
private static void OnReport(HidReport report)
{
if (!_device.IsConnected) { return; }
var cardData = new Data(report.Data);
Console.WriteLine(!cardData.Error ? Encoding.ASCII.GetString(cardData.CardData) : cardData.ErrorMessage);
_device.ReadReport(OnReport);
}
private static void DeviceAttachedHandler()
{
Console.WriteLine("Device attached.");
_device.ReadReport(OnReport);
}
private static void DeviceRemovedHandler()
{
Console.WriteLine("Device removed.");
}
}
}
我正在开发一个 Windows 应从 USB 秤获取数据的表单应用程序。 USB 秤的处理方式类似于键盘。如果有人在体重秤上放东西,体重秤就会像 USB 键盘一样开始输入重量字符串。之前,我通过单击 Forms App 中的文本框,让秤将重量字符串键入文本框。但是现在我需要在不让 Scale 直接写入文本框的情况下获取权重字符串实习生。这样程序就可以在后台处理来自秤的数据。
所以起初我想我必须为输入选择一个设备。 (类似于 Com Port XY 上的 Keyborad)所以我需要创建一个包含所有输入设备的列表。 我如何在 C# .Net 中执行此操作?
我已经试过了:
string[] devices = GetRawInputDeviceList;
textBox1.Text = devices[0];
textBox2.Text = devices[1];
但这不起作用。 也许有人可以告诉我该怎么做?或者你们认为解决我的问题的最佳方法是什么? 请帮忙!
我想通知您,以下代码帮助我解决了问题。 您将需要 Mike O’Brien 的 USB HID 库。您可以在 VisualStudio (NuGet Packages) 或此处下载它:https://github.com/mikeobrien/HidLibrary
using System;
using System.Linq;
using System.Text;
using HidLibrary;
namespace HIDProject
{
class Program
{
private const int VendorId = 0x0801;
private const int ProductId = 0x0002;
private static HidDevice _device;
static void Main()
{
_device = HidDevices.Enumerate(VendorId, ProductId).FirstOrDefault();
if (_device != null)
{
_device.OpenDevice();
_device.Inserted += DeviceAttachedHandler;
_device.Removed += DeviceRemovedHandler;
_device.MonitorDeviceEvents = true;
_device.ReadReport(OnReport);
Console.WriteLine("Reader found, press any key to exit.");
Console.ReadKey();
_device.CloseDevice();
}
else
{
Console.WriteLine("Could not find reader.");
Console.ReadKey();
}
}
private static void OnReport(HidReport report)
{
if (!_device.IsConnected) { return; }
var cardData = new Data(report.Data);
Console.WriteLine(!cardData.Error ? Encoding.ASCII.GetString(cardData.CardData) : cardData.ErrorMessage);
_device.ReadReport(OnReport);
}
private static void DeviceAttachedHandler()
{
Console.WriteLine("Device attached.");
_device.ReadReport(OnReport);
}
private static void DeviceRemovedHandler()
{
Console.WriteLine("Device removed.");
}
}
}