Defensive Usages check.
3 using System.Collections;
4 using System.ComponentModel;
5 using System.Windows.Forms;
7 using Devices.RemoteControl;
9 namespace RemoteControlSample
12 /// Summary description for Form1.
14 public class MainForm : System.Windows.Forms.Form
17 /// Required designer variable.
19 private System.ComponentModel.Container components = null;
20 private RemoteControlDevice _remote;
21 private Label labelButtonName;
22 private Label labelDeviceName;
23 private ListView listViewEvents;
24 private ColumnHeader columnHeaderUsage;
25 private ColumnHeader columnHeaderUsagePage;
26 private ColumnHeader columnHeaderUsageCollection;
27 private ColumnHeader columnHeaderRepeat;
28 private ColumnHeader columnHeaderTime;
31 public delegate void OnHidEventDelegate(object aSender, Hid.HidEvent aHidEvent);
36 // Required for Windows Form Designer support
38 InitializeComponent();
41 _timer.Interval = 3000;
42 _timer.Enabled = false;
43 _timer.Tick +=new EventHandler(_timer_Tick);
47 /// Clean up any resources being used.
49 protected override void Dispose( bool disposing )
53 if (components != null)
58 base.Dispose( disposing );
61 #region Windows Form Designer generated code
63 /// Required method for Designer support - do not modify
64 /// the contents of this method with the code editor.
66 private void InitializeComponent()
68 this.labelButtonName = new System.Windows.Forms.Label();
69 this.labelDeviceName = new System.Windows.Forms.Label();
70 this.listViewEvents = new System.Windows.Forms.ListView();
71 this.columnHeaderUsage = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
72 this.columnHeaderUsagePage = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
73 this.columnHeaderUsageCollection = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
74 this.columnHeaderRepeat = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
75 this.columnHeaderTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
80 this.labelButtonName.AutoSize = true;
81 this.labelButtonName.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
82 this.labelButtonName.Location = new System.Drawing.Point(600, 32);
83 this.labelButtonName.Name = "labelButtonName";
84 this.labelButtonName.Size = new System.Drawing.Size(103, 20);
85 this.labelButtonName.TabIndex = 0;
86 this.labelButtonName.Text = "Button Name";
90 this.labelDeviceName.AutoSize = true;
91 this.labelDeviceName.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
92 this.labelDeviceName.Location = new System.Drawing.Point(600, 12);
93 this.labelDeviceName.Name = "labelDeviceName";
94 this.labelDeviceName.Size = new System.Drawing.Size(103, 20);
95 this.labelDeviceName.TabIndex = 1;
96 this.labelDeviceName.Text = "Device Name";
100 this.listViewEvents.Alignment = System.Windows.Forms.ListViewAlignment.Left;
101 this.listViewEvents.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
102 | System.Windows.Forms.AnchorStyles.Left)));
103 this.listViewEvents.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
104 this.listViewEvents.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
105 this.columnHeaderUsage,
106 this.columnHeaderUsagePage,
107 this.columnHeaderUsageCollection,
108 this.columnHeaderRepeat,
109 this.columnHeaderTime});
110 this.listViewEvents.GridLines = true;
111 this.listViewEvents.Location = new System.Drawing.Point(12, 12);
112 this.listViewEvents.Name = "listViewEvents";
113 this.listViewEvents.Size = new System.Drawing.Size(582, 369);
114 this.listViewEvents.TabIndex = 2;
115 this.listViewEvents.UseCompatibleStateImageBehavior = false;
116 this.listViewEvents.View = System.Windows.Forms.View.Details;
120 this.columnHeaderUsage.Text = "Usage";
121 this.columnHeaderUsage.Width = 180;
123 // columnHeaderUsagePage
125 this.columnHeaderUsagePage.Text = "Usage Page";
126 this.columnHeaderUsagePage.Width = 120;
128 // columnHeaderUsageCollection
130 this.columnHeaderUsageCollection.Text = "Usage Collection";
131 this.columnHeaderUsageCollection.Width = 120;
133 // columnHeaderRepeat
135 this.columnHeaderRepeat.Text = "Repeat";
139 this.columnHeaderTime.Text = "Time";
140 this.columnHeaderTime.Width = 76;
144 this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
145 this.BackColor = System.Drawing.SystemColors.Control;
146 this.ClientSize = new System.Drawing.Size(926, 393);
147 this.Controls.Add(this.listViewEvents);
148 this.Controls.Add(this.labelDeviceName);
149 this.Controls.Add(this.labelButtonName);
150 this.Name = "MainForm";
151 this.Text = "Remote Control Sample";
152 this.Load += new System.EventHandler(this.Form1_Load);
153 this.ResumeLayout(false);
154 this.PerformLayout();
157 #endregion Windows Form Designer generated code
160 /// The main entry point for the application.
165 Application.Run(new MainForm());
168 private void Form1_Load(object sender, System.EventArgs e)
170 _remote = new RemoteControlDevice(this.Handle);
171 _remote.ButtonPressed += new Devices.RemoteControl.RemoteControlDevice.RemoteControlDeviceEventHandler(_remote_ButtonPressed);
172 _remote.iHidHandler.OnHidEvent += HandleHidEventThreadSafe;
175 public void HandleHidEventThreadSafe(object aSender, Hid.HidEvent aHidEvent)
177 if (aHidEvent.IsStray)
179 //Stray event just ignore it
183 if (this.InvokeRequired)
185 //Not in the proper thread, invoke ourselves
186 OnHidEventDelegate d = new OnHidEventDelegate(HandleHidEventThreadSafe);
187 this.Invoke(d, new object[] { aSender, aHidEvent });
191 //We are in the proper thread
192 listViewEvents.Items.Insert(0, aHidEvent.ToListViewItem());
196 protected override void WndProc(ref Message message)
200 _remote.ProcessMessage(message);
202 base.WndProc(ref message);
205 private bool _remote_ButtonPressed(object sender, RemoteControlEventArgs e)
207 //Set text from here was disabled because of threading issues
208 //That whole thing should be removed anyway
209 bool processed = false;
210 _timer.Enabled = false;
211 if (e.Button != RemoteControlButton.Unknown)
213 //labelButtonName.Text = e.Button.ToString();
216 else if (e.MceButton != Hid.UsageTables.WindowsMediaCenterRemoteControl.Null)
218 //Display MCE button name
219 //labelButtonName.Text = e.MceButton.ToString();
220 //Check if this is an HP extension
221 if (Enum.IsDefined(typeof(Hid.UsageTables.HpWindowsMediaCenterRemoteControl), (ushort)e.MceButton))
223 //Also display HP button name
224 //labelButtonName.Text += " / HP:" + ((Hid.UsageTables.HpWindowsMediaCenterRemoteControl)e.MceButton).ToString();
229 else if (e.ConsumerControl != Hid.UsageTables.ConsumerControl.Null)
231 //Display consumer control name
232 //labelButtonName.Text = e.ConsumerControl.ToString();
237 //labelButtonName.Text = "Unknown";
239 //labelDeviceName.Text = e.Device.ToString();
240 _timer.Enabled = true;
244 private void _timer_Tick(object sender, EventArgs e)
246 _timer.Enabled = false;
247 labelButtonName.Text = "Ready...";