예제 #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);
        }
예제 #2
0
 public RawInput(IntPtr parentHandle)
 {
     try
     {
         base.AssignHandle(parentHandle);
         RawInput._rawinputDriver = new RawInputDriver(parentHandle);
         RawInput._rawinputDriver.EnumerateDevices();
         this._devNotifyHandle = RawInput.RegisterForDeviceNotifications(parentHandle);
     }
     catch (Exception ex)
     {
         DebugCenter.GetInstance().appendToFile(ex.Message + "\r\n" + ex.StackTrace);
     }
 }
예제 #3
0
        public bool ProcessRawInput(IntPtr hdevice)
        {
            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);
            }
            if (RawInputDriver._rawBuffer.header.dwType != 2u)
            {
                if (RawInputDriver._rawBuffer.header.dwType == 1u)
                {
                    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))
                    {
                        RawInputEvent rawInputEvent;
                        lock (this._padLock)
                        {
                            rawInputEvent = this._deviceList[RawInputDriver._rawBuffer.header.hDevice];
                            goto IL_144;
                        }
                        return(false);

IL_144:
                        bool flag2 = (flags & 1) != 0;
                        rawInputEvent.RawInputData  = RawInputDriver._rawBuffer;
                        rawInputEvent.KeyPressState = (flag2 ? "BREAK" : "MAKE");
                        rawInputEvent.Message       = RawInputDriver._rawBuffer.data.keyboard.Message;
                        rawInputEvent.VKeyName      = KeyMapper.GetKeyName(RawInputDriver.VirtualKeyCorrection(vKey, isE0BitSet, makecode)).ToUpper();
                        rawInputEvent.VKey          = vKey;
                        if (this.InputEvent != null)
                        {
                            this.InputEvent(this, new InputEventArg(rawInputEvent));
                            return(true);
                        }
                        return(true);
                    }
                    return(false);
                }
                else
                {
                    if (RawInputDriver._rawBuffer.header.dwType == 0u)
                    {
                        if (this._deviceList.ContainsKey(RawInputDriver._rawBuffer.header.hDevice))
                        {
                            RawInputEvent rawInputEvent2;
                            lock (this._padLock)
                            {
                                rawInputEvent2 = this._deviceList[RawInputDriver._rawBuffer.header.hDevice];
                                goto IL_241;
                            }
                            return(false);

IL_241:
                            rawInputEvent2.RawInputData = RawInputDriver._rawBuffer;
                            rawInputEvent2.mouseMessage = (ulong)RawInputDriver._rawBuffer.data.mouse.usButtonFlags;
                            if (this.InputEvent != null)
                            {
                                this.InputEvent(this, new InputEventArg(rawInputEvent2));
                                return(true);
                            }
                            return(true);
                        }
                        return(false);
                    }
                }
            }
            return(true);
        }