From 3605789a3614ba983eddf10c43ff0c91090af6ed Mon Sep 17 00:00:00 2001 From: Devendra Tewari Date: Thu, 7 Nov 2019 18:37:42 -0300 Subject: [PATCH] refresh list of devices --- HidTool/MainForm.Designer.cs | 29 ++++++++++++++++++++++- HidTool/MainForm.cs | 45 +++++++++++++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/HidTool/MainForm.Designer.cs b/HidTool/MainForm.Designer.cs index e9a4079..394390d 100644 --- a/HidTool/MainForm.Designer.cs +++ b/HidTool/MainForm.Designer.cs @@ -29,21 +29,46 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.hidDevicesCombo = new System.Windows.Forms.ComboBox(); + this.refresh = new System.Windows.Forms.Button(); + this.open = new System.Windows.Forms.Button(); this.SuspendLayout(); // // hidDevicesCombo // + this.hidDevicesCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.hidDevicesCombo.FormattingEnabled = true; this.hidDevicesCombo.Location = new System.Drawing.Point(13, 13); this.hidDevicesCombo.Name = "hidDevicesCombo"; - this.hidDevicesCombo.Size = new System.Drawing.Size(121, 21); + this.hidDevicesCombo.Size = new System.Drawing.Size(430, 21); this.hidDevicesCombo.TabIndex = 0; // + // refresh + // + this.refresh.Location = new System.Drawing.Point(449, 13); + this.refresh.Name = "refresh"; + this.refresh.Size = new System.Drawing.Size(75, 23); + this.refresh.TabIndex = 1; + this.refresh.Text = "Refresh"; + this.refresh.UseVisualStyleBackColor = true; + this.refresh.Click += new System.EventHandler(this.Refresh_Click); + // + // open + // + this.open.Location = new System.Drawing.Point(531, 13); + this.open.Name = "open"; + this.open.Size = new System.Drawing.Size(75, 23); + this.open.TabIndex = 2; + this.open.Text = "Open"; + this.open.UseVisualStyleBackColor = true; + this.open.Click += new System.EventHandler(this.Open_Click); + // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.open); + this.Controls.Add(this.refresh); this.Controls.Add(this.hidDevicesCombo); this.Name = "MainForm"; this.Text = "HID Tool"; @@ -55,6 +80,8 @@ private void InitializeComponent() #endregion private System.Windows.Forms.ComboBox hidDevicesCombo; + private System.Windows.Forms.Button refresh; + private System.Windows.Forms.Button open; } } diff --git a/HidTool/MainForm.cs b/HidTool/MainForm.cs index 93d82f1..83ce830 100644 --- a/HidTool/MainForm.cs +++ b/HidTool/MainForm.cs @@ -7,6 +7,9 @@ namespace HidTool { public partial class MainForm : Form { + List hidDevices = new List(); + HidStream stream; + public MainForm() { InitializeComponent(); @@ -14,9 +17,49 @@ public MainForm() private void MainForm_Load(object sender, EventArgs e) { + DeviceList.Local.Changed += DeviceListChanged; + RefreshDevices(); + } + + private void DeviceListChanged(object sender, DeviceListChangedEventArgs e) + { + RefreshDevices(); + } + + private void RefreshDevices() + { + if (InvokeRequired) + { + BeginInvoke(new MethodInvoker(() => + { + RefreshDevices(); + })); + return; + } + hidDevicesCombo.Items.Clear(); + hidDevices.Clear(); foreach (HidDevice device in DeviceList.Local.GetHidDevices()) { - hidDevicesCombo.Items.Add(device.GetFriendlyName()); + hidDevicesCombo.Items.Add($"{device.GetFriendlyName()} [{device.GetSerialNumber()}] [VID 0x{device.VendorID:X}] [PID 0x{device.ProductID:X}]"); + hidDevices.Add(device); + } + } + + private void Refresh_Click(object sender, EventArgs e) + { + RefreshDevices(); + } + + private void Open_Click(object sender, EventArgs e) + { + if (hidDevicesCombo.SelectedIndex == -1) + { + MessageBox.Show(this, "Please select a HID device in the list."); + return; + } + if (!hidDevices[hidDevicesCombo.SelectedIndex].TryOpen(out stream)) + { + MessageBox.Show(this, "Could not open HID stream. Device may be in use."); } } }