来自不同键盘C#.Net的RawInput

时间:2017-03-10 18:19:50

标签: c# .net keyboard input-devices

我正在开发一个Windows Forms应用程序,它应该从USB Scale获取数据。 USB刻度像键盘一样处理。如果有人在秤上放置了某些东西,则秤会开始像USB键盘一样输入重量字符串。之前,我通过单击Forms App中的textBox,让比例键将Weight String键入文本框。但是现在我需要在不让Scale直接写入textBox的情况下获得权重字符串实习生。因此,程序可以在背景中处理来自比例的数据。

所以起初我认为我必须为输入选择一个设备。 (类似于Com Port XY上的Keyborad)所以我需要创建一个包含所有输入设备的List。 我如何在C#.Net中执行此操作?

我已经尝试过:

string[] devices = GetRawInputDeviceList;
textBox1.Text = devices[0];
textBox2.Text = devices[1];

但这不起作用。 也许有人告诉我该怎么做?或者你认为什么是解决我问题的最佳方法? 请帮助!

1 个答案:

答案 0 :(得分:1)

我想通知您,以下代码帮助我解决了我的问题。 您将需要Mike O'Brien的USB HID库。您可以在VisualStudio(NuGet包)或此处下载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.");
        }
    }
}