#region Copyright(c) Travis Robinson
#endregion
using System;
using System.Windows.Forms;
using libusbK;
namespace Hot.Plug.Detect.GUI
{
public partial class Form1 : Form
{
private const int WM_USER = 0x400;
private const int WM_USER_HOT_BASE = WM_USER;
private const int WM_USER_HOT_REMOVAL = WM_USER_HOT_BASE;
private const int WM_USER_HOT_ARRIVAL = WM_USER_HOT_BASE + 1;
private HotK mHotK;
private KHOT_PARAMS mHotParams;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
mHotParams.PatternMatch.DeviceInterfaceGUID = "*";
mHotParams.UserHwnd = Handle;
mHotParams.UserMessage = WM_USER_HOT_BASE;
mHotParams.Flags = KHOT_FLAG.PLUG_ALL_ON_INIT;
mHotParams.Flags |= KHOT_FLAG.POST_USER_MESSAGE;
mHotK = new HotK(ref mHotParams);
}
private void OnHotPlugInvoked(KHOT_HANDLE hotHandle, KLST_DEVINFO_HANDLE deviceInfo, KLST_SYNC_FLAG plugType)
{
string symbolicLink = deviceInfo.SymbolicLink;
switch (plugType)
{
case KLST_SYNC_FLAG.ADDED:
int iRow = dgvDevices.Rows.Add(new object[] {symbolicLink, deviceInfo.DeviceDesc, deviceInfo.DeviceID});
dgvDevices.Rows[iRow].Cells[1].ToolTipText = deviceInfo.ToString();
dgvDevices.Rows[iRow].Cells[2].ToolTipText = deviceInfo.Common.ToString();
break;
case KLST_SYNC_FLAG.REMOVED:
foreach (DataGridViewRow row in dgvDevices.Rows)
{
if (row.Cells[0].Value as string != symbolicLink) continue;
dgvDevices.Rows.Remove(row);
break;
}
break;
default:
throw new ArgumentOutOfRangeException("plugType");
}
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_USER_HOT_REMOVAL || m.Msg == WM_USER_HOT_ARRIVAL)
{
KHOT_HANDLE hotHandle = new KHOT_HANDLE(m.WParam);
KLST_DEVINFO_HANDLE deviceInfo = new KLST_DEVINFO_HANDLE(m.LParam);
KLST_SYNC_FLAG plugType = (m.Msg == WM_USER_HOT_REMOVAL) ? KLST_SYNC_FLAG.REMOVED : KLST_SYNC_FLAG.ADDED;
OnHotPlugInvoked(hotHandle, deviceInfo, plugType);
return;
}
base.WndProc(ref m);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
mHotK.Dispose();
}
}
}