テスターのデモ機を渡され 「USB接続できるから、抵抗値の検査アプリ作って」と言われ調べてみると
専用アプリでしかデータを取り込めないご様子。
仕様を見るとリアルタイムでExcel出力が出来るので、そこから取り込むことは可能だが、、、
バグの原因にしかならないので、直接データを取得を行いたい。
という訳で、USBのやり取りを傍受し、解析してC#のプログラムに取り込みました。
何かの参考になれば幸いです。
解析にはWireshookを使用
まずは Wiredhookをインストールします。同時に USBPcapもインストール。
インストール手順はこちらが参考になります。
Wireshookを開き、早速USBの通信を傍受します。

USBの通信データは USBPcap1か USBcap2に入ってきます。どちらかを開いてみます。
今回は「USBcap2」の方を開いてみました。

USBマウスを繋いでいたので、マウスをすごい勢いでデータを受信しています。
マウスのデータを取得しないよう、フィルタを掛けます。

Source 2.3.1と Destination 2.3.1が表示されないよう、フィルタに追記
!(usb.src == "2.3.1") && !(usb.dst == "2.3.1")
Enterを押すとフィルタが適用され、マウスのデータが非表示になります。
これでスッキリしたので、目的のテスター測定値取得の通信を探ってみます。
テスター記録専用アプリの記録開始をONにしてみました。

上記のような通信が記録されました。
中身を確認してみましょう。


どうやら SET_REPORT Requestで測定値の取得リクエストを送り URB_INTERRUPT in で測定値を受信しているようです。
Data Fragmentと HID Data で送受信内容が確認できます。
これをプログラムに取り込んでみたいと思います。
テストコード
今回使用するライブラリが .NET Framework しか対応していない為、プロジェクト作成の際にご注意ください。
『HidLibrary』を使用しますので、NuGet パッケージマネージャーよりインストールしてください。
using System; using System.Linq; using System.Windows.Forms; namespace USB_TEST { publicpartialclassForm1 : Form { constint VendorId =0x11AD; constint ProductId =0x0700; HidLibrary.HidDevice _device; public Form1() { InitializeComponent(); } privatevoid button1_Click(object sender, EventArgs e) { _device = HidLibrary.HidDevices.Enumerate(VendorId, ProductId).FirstOrDefault(); _device.OpenDevice(); _device.ReadReport(OnReport, 100); _device.WriteReport( new HidLibrary.HidReport(3) { Data =new byte[] { 0x00, 0x82, 0x66 } }); } void OnReport(HidLibrary.HidReport report) { this.Invoke((MethodInvoker)(() => { textBox1.Text = func_convert(report.Data); }));
_device?.ReadReport(OnReport, 100); } } }
button1クリックでデータ取得し、 textBox1に測定結果を格納というテストコードです。
func_convertは受信データの処理を行ってますが、関係ないので割愛します。
テストコード解説
constint VendorId =0x11AD; constint ProductId =0x0700;
該当のUSB機器の Vendor IDと Product IDを格納しておきます。
Vendor IDと Product IDの調べ方は
[デバイスマネージャー]から 該当のUSB機器を探し
[右クリック]→[プロパティ]→[詳細]→[ハードウェアID]

今回の場合は
VID (Vendor ID) = 0x11AD
PID (Product ID) = 0x0700
ドライバー削除や更新をすると、VID、PIDが変わる可能性がある為、ご注意ください。
※VID、PIDなしでUSB機器を検索する方法はありますので、情報探してみてください。
_device = HidLibrary.HidDevices.Enumerate(VendorId, ProductId).FirstOrDefault();
_device.OpenDevice();Vendor IDと Product IDを指定して、デバイスをオープンします。
_device.ReadReport(OnReport, 100);
_device.WriteReport(
new HidLibrary.HidReport(3)
{
Data =new byte[] { 0x00, 0x82, 0x66 }
});USB機器から受信した際のコールバック関数を指定します。
その後、USB機器にデータ(レポート)を送ります。
データ は byte配列に格納します。今回の場合はこの部分になります。

void OnReport(HidLibrary.HidReport report) { this.Invoke((MethodInvoker)(() => { textBox1.Text = func_convert(report.Data); })); _device?.ReadReport(OnReport); }
USB機器からのコールバック関数です。
report.Dataに受信内容が byte配列で入ってきます。
func_convert(); は受信データの処理なので割愛します。
_device.ReadReport(OnReport, 100);
最後に再度コールバックを登録します。引数2はタイムアウトです。
あとがき
HIDデバイスの通信方法を調べると、大体が WinAPIを使用する方法で
1から作ると面倒臭いので、HidLibraryを使用しました。
.NET用の HIDライブラリは恐らくなくて、UWPだと HIDが簡単に実装出来るらしいので、恐らくそれを使えという事なんだと思います。