2017-03-10 7 views
2

私はUSBスケールからデータを取得する必要があるWindowsフォームアプリケーションで作業しています。 USBスケールはキーボードのように扱われます。誰かが何かをスケールに置くと、スケールはUSBキーボードのように体重ストリングを入力し始めます。以前は、フォームアプリケーションでtextBoxをクリックすることで、スケールにWeight Stringをテキストボックスに入力させました。しかし、今度は、Scaleを直接textBoxに書き込ませることなく、体重文字列を取得する必要があります。そのため、プログラムはバックグラウンドにある間にスケールからデータを処理することができます。RawInputから別のキーボードC#.Net

最初は入力用のデバイスを選択する必要があると思います。 (COMポートXYのKeyboradのようなもの)だから、すべての入力デバイスを含むリストを作成する必要があります。 C#.Netでこれを行うにはどうすればよいですか?

私はすでに試した:

string[] devices = GetRawInputDeviceList; 
textBox1.Text = devices[0]; 
textBox2.Text = devices[1]; 
をしかし、これは動作しません。 誰かが私にそのことを教えてもらえますか?それとも、私の問題を解決する最善の方法だと思いますか? 助けてください!

+0

https://github.com/mikeobrien/HidLibraryは、「しかし、これは動作していない」 - ケアは、その上で詳しく説明して? –

+0

この投稿には、この件に関する興味深いリンクがあります:https://www.codeproject.com/Questions/242099/How-I-can-Read-Write-on-USB-port-with-csharp –

+0

"ScaleCalc75.exeで 'System.NullReferenceException'型の未処理の例外が発生しました。"というテキストボックスが表示されます。 –

答えて

1

次のコードが私の問題解決に役立ったことをお知らせしたいと思います。 Mike O'BrienのUSB HIDライブラリが必要です。あなたはここにVisualStudioを(NuGetパッケージ)でそれをダウンロードしたりすることができます

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."); 
     } 
    } 
} 
関連する問題