Fixing nasty double repeat event issue.
Adding time column.
2 using System.Windows.Forms;
3 using System.Runtime.InteropServices;
4 using System.Diagnostics;
6 using Microsoft.Win32.SafeHandles;
8 using System.Collections.Generic;
16 /// Our HID handler manages raw input registrations, processes WM_INPUT messages and broadcasts HID events in return.
18 public class HidHandler
20 public delegate void HidEventHandler(object aSender, HidEvent aHidEvent);
21 public event HidEventHandler OnHidEvent;
22 List<HidEvent> iHidEvents;
25 public bool IsRegistered { get; private set; }
27 public HidHandler(RAWINPUTDEVICE[] aRawInputDevices)
29 iHidEvents=new List<HidEvent>();
30 IsRegistered = Function.RegisterRawInputDevices(aRawInputDevices, (uint)aRawInputDevices.Length, (uint)Marshal.SizeOf(aRawInputDevices[0]));
33 public void ProcessInput(Message aMessage)
35 Hid.HidEvent hidEvent = new Hid.HidEvent(aMessage, OnHidEventRepeat);
36 hidEvent.DebugWrite();
38 if (!hidEvent.IsValid || !hidEvent.IsGeneric)
40 Debug.WriteLine("Skipping HID message.");
45 if (hidEvent.Usages[0] == 0)
47 //This is a key up event
48 //We need to discard any events belonging to the same page and collection
49 for (int i = (iHidEvents.Count-1); i >= 0; i--)
51 if (iHidEvents[i].UsageId == hidEvent.UsageId)
53 iHidEvents[i].Dispose();
54 iHidEvents.RemoveAt(i);
60 //Keep that event until we get a key up message
61 iHidEvents.Add(hidEvent);
64 //Broadcast our events
65 OnHidEvent(this, hidEvent);
68 public void OnHidEventRepeat(HidEvent aHidEvent)
70 //Broadcast our events
71 OnHidEvent(this, aHidEvent);