Exemple #1
0
        /// <summary>
        /// Populate our tree view with our devices.
        /// </summary>
        private void PopulateDeviceList()
        {
            treeViewDevices.Nodes.Clear();
            //Create our list of HID devices
            PopulateDeviceList(treeViewDevices);
            treeViewDevices.CollapseAll();
            //Hide check boxes
            //treeViewDevices.Nodes.OfType<TreeNode>().ToList().ForEach(n => TreeViewUtils.HideCheckBox(treeViewDevices,n));
            //Do it twice because of that bug where the first node we hit is not hiding its checkbox as it should.
            treeViewDevices.Nodes.OfType <TreeNode>().ToList().ForEach(n => n.Nodes.OfType <TreeNode>().ToList().ForEach(on => TreeViewUtils.HideCheckBox(treeViewDevices, on)));
            treeViewDevices.Nodes.OfType <TreeNode>().ToList().ForEach(n => n.Nodes.OfType <TreeNode>().ToList().ForEach(on => TreeViewUtils.HideCheckBox(treeViewDevices, on)));

            foreach (TreeNode node in treeViewDevices.Nodes)
            {
                Hid.Device device = (Hid.Device)node.Tag;
                if (!(device.DeviceType == Hid.DeviceType.Hid))
                {
                    //Now allowing mouse and keyboard to register too
                    //Do not allow registering mice and keyboards for now
                    //TreeViewUtils.HideCheckBox(treeViewDevices, node);
                }
            }

            //Dump our devices to our logs
            richTextBoxLogs.AppendText(TreeViewUtils.TreeViewToText(treeViewDevices));
        }
Exemple #2
0
        private void deviceNodeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Walk up the tree until we find our device
            TreeNode node = treeViewDevices.SelectedNode;

            while (!(node.Tag is Hid.Device))
            {
                node = node.Parent;
            }
            Hid.Device device = (Hid.Device)node.Tag;

            // Then show our porpeties dialog
            OpenPropertiesDialog(device.Name);
        }
Exemple #3
0
        /// <summary>
        /// Check some devices for registration
        /// </summary>
        void CheckDefaultDevices()
        {
            uint mceUsageId      = (uint)Hid.UsagePage.WindowsMediaCenterRemoteControl << 16 | (uint)Hid.UsageCollection.WindowsMediaCenter.WindowsMediaCenterRemoteControl;
            uint consumerUsageId = (uint)Hid.UsagePage.Consumer << 16 | (uint)Hid.UsageCollection.Consumer.ConsumerControl;
            uint gamepadUsageId  = (uint)Hid.UsagePage.GenericDesktopControls << 16 | (uint)Hid.UsageCollection.GenericDesktop.GamePad;

            foreach (TreeNode node in treeViewDevices.Nodes)
            {
                Hid.Device device = (Hid.Device)node.Tag;
                if (device.DeviceType == Hid.DeviceType.Keyboard || (device.DeviceType == Hid.DeviceType.Hid &&
                                                                     (device.UsageId == mceUsageId || device.UsageId == consumerUsageId || device.UsageId == gamepadUsageId)))
                {
                    node.Checked = true;
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// Go through our device list and register the devices that are checked.
        /// </summary>
        void RegisterHidDevices()
        {
            // Register the input device to receive the commands from the
            // remote device. See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwmt/html/remote_control.asp
            // for the vendor defined usage page.

            DisposeHandlers();

            //Get our flags
            RadioButton checkedRadioButton = groupBoxRegistrationFlag.Controls.OfType <RadioButton>().FirstOrDefault(r => r.Checked);
            uint        flags = uint.Parse((string)checkedRadioButton.Tag, System.Globalization.NumberStyles.HexNumber);
            // See: Const.RIDEV_EXINPUTSINK and Const.RIDEV_INPUTSINK

            //We collect our devices in a dictionary to remove duplicates
            Dictionary <uint, Hid.Device> devices = new Dictionary <uint, Hid.Device>();

            foreach (TreeNode node in treeViewDevices.Nodes)
            {
                Hid.Device device = (Hid.Device)node.Tag;
                //Now allowing mouse and keyboard to register too
                if (node.Checked /*&& device.IsHid*/)
                {
                    try
                    {
                        devices.Add(device.UsageId, device);
                    }
                    catch //(Exception ex)
                    {
                        //Just ignore duplicate UsageId
                        Debug.WriteLine("Similar device already registered!");
                    }
                }
            }

            if (devices.Count == 0)
            {
                //No device to register for, nothing to do here
                return;
            }

            int i = 0;

            RAWINPUTDEVICE[] rid = new RAWINPUTDEVICE[devices.Count];

            foreach (KeyValuePair <uint, Hid.Device> entry in devices)
            {
                rid[i].usUsagePage = entry.Value.UsagePage;
                rid[i].usUsage     = entry.Value.UsageCollection;
                rid[i].dwFlags     = (RawInputDeviceFlags)flags;
                rid[i].hwndTarget  = Handle;
                i++;
            }

            /*
             * int i = 0;
             * rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.WindowsMediaCenterRemoteControl;
             * rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.WindowsMediaCenter.WindowsMediaCenterRemoteControl;
             * rid[i].dwFlags = flags;
             * rid[i].hwndTarget = Handle;
             *
             * i++;
             * rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.WindowsMediaCenterRemoteControl;
             * rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.WindowsMediaCenter.WindowsMediaCenterLowLevel;
             * rid[i].dwFlags = flags;
             * rid[i].hwndTarget = Handle;
             *
             * i++;
             * rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.Consumer;
             * rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.Consumer.ConsumerControl;
             * rid[i].dwFlags = flags;
             * rid[i].hwndTarget = Handle;
             *
             * i++;
             * rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.Consumer;
             * rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.Consumer.Selection;
             * rid[i].dwFlags = flags;
             * rid[i].hwndTarget = Handle;
             *
             * i++;
             * rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.GenericDesktopControls;
             * rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.GenericDesktop.SystemControl;
             * rid[i].dwFlags = flags;
             * rid[i].hwndTarget = Handle;
             *
             * i++;
             * rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.GenericDesktopControls;
             * rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.GenericDesktop.GamePad;
             * rid[i].dwFlags = flags;
             * rid[i].hwndTarget = Handle;
             */

            //i++;
            //rid[i].usUsagePage = (ushort)SharpLib.Hid.UsagePage.GenericDesktopControls;
            //rid[i].usUsage = (ushort)SharpLib.Hid.UsageCollection.GenericDesktop.Keyboard;
            //rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
            //rid[i].hwndTarget = Handle;

            //i++;
            //rid[i].usUsagePage = (ushort)Hid.UsagePage.GenericDesktopControls;
            //rid[i].usUsage = (ushort)Hid.UsageCollection.GenericDesktop.Mouse;
            //rid[i].dwFlags = Const.RIDEV_EXINPUTSINK;
            //rid[i].hwndTarget = aHWND;

            iHidHandler = new SharpLib.Hid.Handler(rid, checkBoxRepeat.Checked, (int)numericRepeatDelay.Value, (int)numericRepeatSpeed.Value);
            if (!iHidHandler.IsRegistered)
            {
                Debug.WriteLine("Failed to register raw input devices: " + Marshal.GetLastWin32Error().ToString());
            }

            if (checkBoxUseSingleHandler.Checked)
            {
                iHidParser = iHidHandler;
            }
            else
            {
                //For testing purposes we parse WM_INPUT messages from another Handler instance.
                iHidParser = new SharpLib.Hid.Handler(checkBoxRepeat.Checked, (int)numericRepeatDelay.Value, (int)numericRepeatSpeed.Value);
            }

            iHidParser.OnHidEvent += HandleHidEventThreadSafe;
        }