Exemple #1
0
        public bool ProcessRawInput(IntPtr hdevice, out RawInputEvent inputEvent)
        {
            inputEvent        = new RawInputEvent();
            inputEvent.Filter = false;
            if (this._deviceList.Count == 0)
            {
                return(false);
            }
            if (this.CaptureOnlyIfTopMostWindow && !this.isForegroundProcess())
            {
                return(false);
            }
            int num = 0;

            Win32.GetRawInputData(hdevice, DataCommand.RID_INPUT, IntPtr.Zero, ref num, Marshal.SizeOf(typeof(Rawinputheader)));
            if (num != Win32.GetRawInputData(hdevice, DataCommand.RID_INPUT, out RawInputDriver._rawBuffer, ref num, Marshal.SizeOf(typeof(Rawinputheader))))
            {
                return(false);
            }
            int vKey     = (int)RawInputDriver._rawBuffer.data.keyboard.VKey;
            int makecode = (int)RawInputDriver._rawBuffer.data.keyboard.Makecode;
            int flags    = (int)RawInputDriver._rawBuffer.data.keyboard.Flags;

            if (vKey == 255)
            {
                return(false);
            }
            bool isE0BitSet = (flags & 2) != 0;

            if (this._deviceList.ContainsKey(RawInputDriver._rawBuffer.header.hDevice))
            {
                lock (this._padLock)
                {
                    inputEvent = this._deviceList[RawInputDriver._rawBuffer.header.hDevice];
                    goto IL_129;
                }
                return(false);

IL_129:
                inputEvent.RawInputData = RawInputDriver._rawBuffer;
                if (inputEvent.DeviceType.Equals("KEYBOARD"))
                {
                    bool flag2 = (flags & 1) != 0;
                    inputEvent.KeyPressState = (flag2 ? "BREAK" : "MAKE");
                    inputEvent.Message       = RawInputDriver._rawBuffer.data.keyboard.Message;
                    inputEvent.VKeyName      = KeyMapper.GetKeyName(RawInputDriver.VirtualKeyCorrection(vKey, isE0BitSet, makecode)).ToUpper();
                    inputEvent.VKey          = vKey;
                }
                if (this.InputEvent != null)
                {
                    this.InputEvent(this, new InputEventArg(inputEvent));
                }
                return(true);
            }
            return(false);
        }
Exemple #2
0
 public InputEventArg(RawInputEvent arg)
 {
     this.RawInputEvent = arg;
 }
Exemple #3
0
 public void EnumerateDevices()
 {
     lock (this._padLock)
     {
         try
         {
             this._deviceList.Clear();
             int  num  = 0;
             int  num2 = 0;
             int  num3 = 0;
             int  num4 = 0;
             uint num5 = 0u;
             int  num6 = Marshal.SizeOf(typeof(Rawinputdevicelist));
             if (Win32.GetRawInputDeviceList(IntPtr.Zero, ref num5, (uint)num6) == 0u)
             {
                 IntPtr intPtr = Marshal.AllocHGlobal((int)((long)num6 * (long)((ulong)num5)));
                 Win32.GetRawInputDeviceList(intPtr, ref num5, (uint)num6);
                 int num7 = 0;
                 while ((long)num7 < (long)((ulong)num5))
                 {
                     uint num8 = 0u;
                     Rawinputdevicelist rawinputdevicelist = (Rawinputdevicelist)Marshal.PtrToStructure(new IntPtr(intPtr.ToInt64() + (long)(num6 * num7)), typeof(Rawinputdevicelist));
                     Win32.GetRawInputDeviceInfo(rawinputdevicelist.hDevice, RawInputDeviceInfo.RIDI_DEVICENAME, IntPtr.Zero, ref num8);
                     if (num8 > 0u)
                     {
                         IntPtr intPtr2 = Marshal.AllocHGlobal((int)num8);
                         Win32.GetRawInputDeviceInfo(rawinputdevicelist.hDevice, RawInputDeviceInfo.RIDI_DEVICENAME, intPtr2, ref num8);
                         string device = Marshal.PtrToStringAnsi(intPtr2);
                         if (rawinputdevicelist.dwType == 1u)
                         {
                             string        deviceDescription = Win32.GetDeviceDescription(device);
                             RawInputEvent value             = new RawInputEvent
                             {
                                 DeviceName   = Marshal.PtrToStringAnsi(intPtr2),
                                 DeviceHandle = rawinputdevicelist.hDevice,
                                 DeviceType   = Win32.GetDeviceType(rawinputdevicelist.dwType),
                                 Name         = deviceDescription,
                                 Source       = num++.ToString(CultureInfo.InvariantCulture)
                             };
                             if (!this._deviceList.ContainsKey(rawinputdevicelist.hDevice))
                             {
                                 num4++;
                                 this._deviceList.Add(rawinputdevicelist.hDevice, value);
                             }
                         }
                         else
                         {
                             if (rawinputdevicelist.dwType == 0u)
                             {
                                 string        deviceDescription2 = Win32.GetDeviceDescription(device);
                                 RawInputEvent value2             = new RawInputEvent
                                 {
                                     DeviceName   = Marshal.PtrToStringAnsi(intPtr2),
                                     DeviceHandle = rawinputdevicelist.hDevice,
                                     DeviceType   = Win32.GetDeviceType(rawinputdevicelist.dwType),
                                     Name         = deviceDescription2,
                                     Source       = num2++.ToString(CultureInfo.InvariantCulture)
                                 };
                                 if (!this._deviceList.ContainsKey(rawinputdevicelist.hDevice))
                                 {
                                     num4++;
                                     this._deviceList.Add(rawinputdevicelist.hDevice, value2);
                                 }
                             }
                             else
                             {
                                 if (rawinputdevicelist.dwType == 2u)
                                 {
                                     string        deviceDescription3 = Win32.GetDeviceDescription(device);
                                     RawInputEvent value3             = new RawInputEvent
                                     {
                                         DeviceName   = Marshal.PtrToStringAnsi(intPtr2),
                                         DeviceHandle = rawinputdevicelist.hDevice,
                                         DeviceType   = Win32.GetDeviceType(rawinputdevicelist.dwType),
                                         Name         = deviceDescription3,
                                         Source       = num3++.ToString(CultureInfo.InvariantCulture)
                                     };
                                     if (!this._deviceList.ContainsKey(rawinputdevicelist.hDevice))
                                     {
                                         num4++;
                                         this._deviceList.Add(rawinputdevicelist.hDevice, value3);
                                     }
                                 }
                             }
                         }
                         Marshal.FreeHGlobal(intPtr2);
                     }
                     num7++;
                 }
                 Marshal.FreeHGlobal(intPtr);
                 this.NumberOfKeyboards = num4;
                 string msg = string.Format("EnumerateDevices() found {0}, Keyboard({1}), Mouse({2}), HID({3})", new object[]
                 {
                     this.NumberOfKeyboards.ToString(),
                     num.ToString(),
                     num2.ToString(),
                     num3.ToString()
                 });
                 DebugCenter.GetInstance().appendToFile(msg);
             }
         }
         catch (Exception ex)
         {
             DebugCenter.GetInstance().appendToFile(ex.Message + "\r\n" + ex.StackTrace);
         }
     }
 }
Exemple #4
0
        public static string DeviceAudit()
        {
            string       text         = "";
            FileStream   fileStream   = new FileStream("DeviceAudit.txt", FileMode.Create, FileAccess.Write);
            StreamWriter streamWriter = new StreamWriter(fileStream);
            int          num          = 0;
            uint         num2         = 0u;
            int          num3         = Marshal.SizeOf(typeof(Rawinputdevicelist));

            if (Win32.GetRawInputDeviceList(IntPtr.Zero, ref num2, (uint)num3) == 0u)
            {
                IntPtr intPtr = Marshal.AllocHGlobal((int)((long)num3 * (long)((ulong)num2)));
                Win32.GetRawInputDeviceList(intPtr, ref num2, (uint)num3);
                int num4 = 0;
                while ((long)num4 < (long)((ulong)num2))
                {
                    uint num5 = 0u;
                    Rawinputdevicelist rawinputdevicelist = (Rawinputdevicelist)Marshal.PtrToStructure(new IntPtr(intPtr.ToInt64() + (long)(num3 * num4)), typeof(Rawinputdevicelist));
                    Win32.GetRawInputDeviceInfo(rawinputdevicelist.hDevice, RawInputDeviceInfo.RIDI_DEVICENAME, IntPtr.Zero, ref num5);
                    if (num5 <= 0u)
                    {
                        streamWriter.WriteLine("pcbSize: " + num5);
                        streamWriter.WriteLine(Marshal.GetLastWin32Error().ToString());
                        streamWriter.Flush();
                        streamWriter.Close();
                        fileStream.Close();
                        return(text);
                    }
                    uint       num6       = (uint)Marshal.SizeOf(typeof(DeviceInfo));
                    DeviceInfo deviceInfo = new DeviceInfo
                    {
                        Size = Marshal.SizeOf(typeof(DeviceInfo))
                    };
                    if (Win32.GetRawInputDeviceInfo(rawinputdevicelist.hDevice, 536870923u, ref deviceInfo, ref num6) <= 0u)
                    {
                        streamWriter.WriteLine(Marshal.GetLastWin32Error());
                        streamWriter.Flush();
                        streamWriter.Close();
                        fileStream.Close();
                        return(text);
                    }
                    IntPtr intPtr2 = Marshal.AllocHGlobal((int)num5);
                    Win32.GetRawInputDeviceInfo(rawinputdevicelist.hDevice, RawInputDeviceInfo.RIDI_DEVICENAME, intPtr2, ref num5);
                    string device = Marshal.PtrToStringAnsi(intPtr2);
                    if (rawinputdevicelist.dwType == 1u || rawinputdevicelist.dwType == 2u)
                    {
                        string        deviceDescription = Win32.GetDeviceDescription(device);
                        RawInputEvent rawInputEvent     = new RawInputEvent
                        {
                            DeviceName   = Marshal.PtrToStringAnsi(intPtr2),
                            DeviceHandle = rawinputdevicelist.hDevice,
                            DeviceType   = Win32.GetDeviceType(rawinputdevicelist.dwType),
                            Name         = deviceDescription,
                            Source       = num++.ToString(CultureInfo.InvariantCulture)
                        };
                        streamWriter.WriteLine(rawInputEvent.ToString());
                        streamWriter.WriteLine(deviceInfo.ToString());
                        streamWriter.WriteLine(deviceInfo.KeyboardInfo.ToString());
                        streamWriter.WriteLine(deviceInfo.HIDInfo.ToString());
                        streamWriter.WriteLine("=========================================================================================================");
                        text += string.Format("{0}\r\n", rawInputEvent.ToString());
                        text += string.Format("{0}\r\n", deviceInfo.ToString());
                        text += string.Format("{0}\r\n", deviceInfo.KeyboardInfo.ToString());
                        text += string.Format("{0}\r\n", deviceInfo.HIDInfo.ToString());
                        text += "=========================================================================================================\r\n";
                    }
                    Marshal.FreeHGlobal(intPtr2);
                    num4++;
                }
                Marshal.FreeHGlobal(intPtr);
                streamWriter.Flush();
                streamWriter.Close();
                fileStream.Close();
                return(text);
            }
            throw new Win32Exception(Marshal.GetLastWin32Error());
        }