Example #1
0
        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            //IntPtr activeWindowHandle = GetForegroundWindow();
            //Process curProcess = Process.GetCurrentProcess();
            //if (activeWindowHandle == curProcess.MainWindowHandle)
            //{

            if (nCode >= 0 &&
                MouseMessages.WM_RBUTTONDOWN == (MouseMessages)wParam)
            {
                return(new IntPtr(1));
            }
            if (nCode >= 0 &&
                MouseMessages.WM_RBUTTONUP == (MouseMessages)wParam)
            {
                MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
                //Console.WriteLine(hookStruct.pt.x + ", " + hookStruct.pt.y);
                RemoteControlButton rcb = RemoteControlButton.Details;
                OMLApplication.Current.CatchMoreInfo();
                SendMoreInfo();
                //if (this.ButtonPressed != null && rcb != RemoteControlButton.Unknown)
                //    this.ButtonPressed(this, new RemoteControlEventArgs(rcb, InputDevice.Mouse));
                return(new IntPtr(1));
            }
            //}
            return(CallNextHookEx(_hookID, nCode, wParam, lParam));
        }
Example #2
0
        private void ProcessMouseCommand()
        {
            RemoteControlButton rcb = RemoteControlButton.Details;

            if (this.ButtonPressed != null && rcb != RemoteControlButton.Unknown)
            {
                this.ButtonPressed(this, new RemoteControlEventArgs(rcb, InputDevice.Mouse));
            }
        }
Example #3
0
 public RemoteControlEventArgs()
 {
     _rcb    = RemoteControlButton.Unknown;
     _device = InputDevice.Key;
 }
Example #4
0
        private void ProcessInputCommand(ref Message message)
        {
            RemoteControlButton rcb = RemoteControlButton.Unknown;
            uint dwSize             = 0;

            GetRawInputData(message.LParam,
                            RID_INPUT,
                            IntPtr.Zero,
                            ref dwSize,
                            (uint)Marshal.SizeOf(typeof(RAWINPUTHEADER)
                                                 ));

            IntPtr buffer = Marshal.AllocHGlobal((int)dwSize);

            try
            {
                if (buffer == IntPtr.Zero)
                {
                    return;
                }

                if (GetRawInputData(message.LParam,
                                    RID_INPUT,
                                    buffer,
                                    ref dwSize,
                                    (uint)Marshal.SizeOf(typeof(RAWINPUTHEADER))) != dwSize
                    )
                {
                    return;
                }

                RAWINPUT raw = (RAWINPUT)Marshal.PtrToStructure(buffer, typeof(RAWINPUT));
                if (raw.header.dwType == RIM_TYPEHID)
                {
                    byte[] bRawData = new byte[raw.hid.dwSizHid];
                    int    pRawData = buffer.ToInt32() + Marshal.SizeOf(typeof(RAWINPUT)) + 1;

                    Marshal.Copy(new IntPtr(pRawData), bRawData, 0, raw.hid.dwSizHid - 1);
                    int rawData = bRawData[0] | bRawData[1] << 8;

                    switch (rawData)
                    {
                    case RAWINPUT_DETAILS:
                        rcb = RemoteControlButton.Details;
                        OMLApplication.Current.CatchMoreInfo();
                        SendMoreInfo();
                        break;

                    case RAWINPUT_GUIDE:
                        rcb = RemoteControlButton.Guide;
                        break;

                    case RAWINPUT_TVJUMP:
                        rcb = RemoteControlButton.TVJump;
                        break;

                    case RAWINPUT_STANDBY:
                        rcb = RemoteControlButton.StandBy;
                        break;

                    case RAWINPUT_OEM1:
                        rcb = RemoteControlButton.OEM1;
                        break;

                    case RAWINPUT_OEM2:
                        rcb = RemoteControlButton.OEM2;
                        break;

                    case RAWINPUT_MYTV:
                        rcb = RemoteControlButton.MyTV;
                        break;

                    case RAWINPUT_MYVIDEOS:
                        rcb = RemoteControlButton.MyVideos;
                        break;

                    case RAWINPUT_MYPICTURES:
                        rcb = RemoteControlButton.MyPictures;
                        break;

                    case RAWINPUT_MYMUSIC:
                        rcb = RemoteControlButton.MyMusic;
                        break;

                    case RAWINPUT_RECORDEDTV:
                        rcb = RemoteControlButton.RecordedTV;
                        break;

                    case RAWINPUT_DVDANGLE:
                        rcb = RemoteControlButton.DVDAngle;
                        break;

                    case RAWINPUT_DVDAUDIO:
                        rcb = RemoteControlButton.DVDAudio;
                        break;

                    case RAWINPUT_DVDMENU:
                        rcb = RemoteControlButton.DVDMenu;
                        break;

                    case RAWINPUT_DVDSUBTITLE:
                        rcb = RemoteControlButton.DVDSubtitle;
                        break;
                    }

                    if (rcb != RemoteControlButton.Unknown && this.ButtonPressed != null)
                    {
                        this.ButtonPressed(this, new RemoteControlEventArgs(rcb, GetDevice(message.LParam.ToInt32())));
                    }
                }
                else if (raw.header.dwType == RIM_TYPEMOUSE)
                {
                    // do mouse handling...
                    //MessageBox.Show("mouse");
                }
                else if (raw.header.dwType == RIM_TYPEKEYBOARD)
                {
                    // do keyboard handling...
                }
            }
            finally
            {
                Marshal.FreeHGlobal(buffer);
            }
        }
Example #5
0
 public RemoteControlEventArgs(RemoteControlButton rcb, InputDevice device)
 {
     _rcb    = rcb;
     _device = device;
 }
Example #6
0
        private void ProcessAppCommand(int param)
        {
            RemoteControlButton rcb = RemoteControlButton.Unknown;

            int cmd = (int)(((ushort)(param >> 16)) & ~FAPPCOMMAND_MASK);

            switch (cmd)
            {
            case APPCOMMAND_BROWSER_BACKWARD:
                rcb = RemoteControlButton.Back;
                break;

            case APPCOMMAND_MEDIA_CHANNEL_DOWN:
                rcb = RemoteControlButton.ChannelDown;
                break;

            case APPCOMMAND_MEDIA_CHANNEL_UP:
                rcb = RemoteControlButton.ChannelUp;
                break;

            case APPCOMMAND_MEDIA_FAST_FORWARD:
                rcb = RemoteControlButton.FastForward;
                break;

            case APPCOMMAND_VOLUME_MUTE:
                rcb = RemoteControlButton.VolumeMute;
                break;

            case APPCOMMAND_MEDIA_PAUSE:
                rcb = RemoteControlButton.Pause;
                break;

            case APPCOMMAND_MEDIA_PLAY:
                rcb = RemoteControlButton.Play;
                break;

            case APPCOMMAND_MEDIA_RECORD:
                rcb = RemoteControlButton.Record;
                break;

            case APPCOMMAND_MEDIA_PREVIOUSTRACK:
                rcb = RemoteControlButton.PreviousTrack;
                break;

            case APPCOMMAND_MEDIA_REWIND:
                rcb = RemoteControlButton.Rewind;
                break;

            case APPCOMMAND_MEDIA_NEXTTRACK:
                rcb = RemoteControlButton.NextTrack;
                break;

            case APPCOMMAND_MEDIA_STOP:
                rcb = RemoteControlButton.Stop;
                break;

            case APPCOMMAND_VOLUME_DOWN:
                rcb = RemoteControlButton.VolumeDown;
                break;

            case APPCOMMAND_VOLUME_UP:
                rcb = RemoteControlButton.VolumeUp;
                break;
            }

            if (this.ButtonPressed != null && rcb != RemoteControlButton.Unknown)
            {
                this.ButtonPressed(this, new RemoteControlEventArgs(rcb, GetDevice(param)));
            }
        }
Example #7
0
        //-------------------------------------------------------------
        // methods (helpers)
        //-------------------------------------------------------------

        private void ProcessKeyDown(int param)
        {
            RemoteControlButton rcb = RemoteControlButton.Unknown;

            switch (param)
            {
            case (int)Keys.Escape:
                rcb = RemoteControlButton.Clear;
                break;

            case (int)Keys.Down:
                rcb = RemoteControlButton.Down;
                break;

            case (int)Keys.Left:
                rcb = RemoteControlButton.Left;
                break;

            case (int)Keys.D0:
                rcb = RemoteControlButton.Digit0;
                break;

            case (int)Keys.D1:
                rcb = RemoteControlButton.Digit1;
                break;

            case (int)Keys.D2:
                rcb = RemoteControlButton.Digit2;
                break;

            case (int)Keys.D3:
                rcb = RemoteControlButton.Digit3;
                break;

            case (int)Keys.D4:
                rcb = RemoteControlButton.Digit4;
                break;

            case (int)Keys.D5:
                rcb = RemoteControlButton.Digit5;
                break;

            case (int)Keys.D6:
                rcb = RemoteControlButton.Digit6;
                break;

            case (int)Keys.D7:
                rcb = RemoteControlButton.Digit7;
                break;

            case (int)Keys.D8:
                rcb = RemoteControlButton.Digit8;
                break;

            case (int)Keys.D9:
                rcb = RemoteControlButton.Digit9;
                break;

            case (int)Keys.Enter:
                rcb = RemoteControlButton.Enter;
                break;

            case (int)Keys.Right:
                rcb = RemoteControlButton.Right;
                break;

            case (int)Keys.Up:
                rcb = RemoteControlButton.Up;
                break;

            case (int)Keys.Back:
                rcb = RemoteControlButton.Back;
                break;

            case (int)Keys.BrowserBack:
                rcb = RemoteControlButton.Back;
                break;
            }

            if (this.ButtonPressed != null && rcb != RemoteControlButton.Unknown)
            {
                this.ButtonPressed(this, new RemoteControlEventArgs(rcb, GetDevice(param)));
            }
        }
Example #8
0
        private static IntPtr KBHookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
            {
                int vkCode = Marshal.ReadInt32(lParam);
                Console.WriteLine(vkCode);
                if (Keys.D == (Keys)vkCode && Keys.Control == Control.ModifierKeys)
                {
                    RemoteControlButton rcb = RemoteControlButton.Details;
                    //OMLApplication.Current.CatchMoreInfo();
                    OMLApplication.Current.CatchMoreInfo();
                    SendMoreInfo();
                    return(new IntPtr(1));
                    //if (this.ButtonPressed != null && rcb != RemoteControlButton.Unknown)
                    //    this.ButtonPressed(this, new RemoteControlEventArgs(rcb, InputDevice.Key));
                }
                else if (vkCode == WM_CONTEXTMENU || vkCode == 93 || vkCode == VK_APPS)
                {
                    RemoteControlButton rcb = RemoteControlButton.Details;
                    OMLApplication.Current.CatchMoreInfo();
                    SendMoreInfo();
                    return(new IntPtr(1));
                }
                //{
                //    RemoteControlButton rcb = RemoteControlButton.Details;
                //    //OMLApplication.Current.CatchMoreInfo();
                //    SendMoreInfo();
                //    //if (this.ButtonPressed != null && rcb != RemoteControlButton.Unknown)
                //    //    this.ButtonPressed(this, new RemoteControlEventArgs(rcb, InputDevice.Key));
                //}
                //if (Keys.Back == (Keys)vkCode || Keys.BrowserBack == (Keys)vkCode)
                //{
                //    RemoteControlButton rcb = RemoteControlButton.Back;

                //    //Application.Current.DialogTest("TestHarness");
                //    Application.Current.GoBack();

                //    //if (this.ButtonPressed != null && rcb != RemoteControlButton.Unknown)
                //    //    this.ButtonPressed(this, new RemoteControlEventArgs(rcb, InputDevice.Key));
                //}
            }
            else if (nCode >= 0 && wParam == (IntPtr)WM_KEYUP)
            {
                int vkCode = Marshal.ReadInt32(lParam);
                Console.WriteLine(vkCode);
                if (Keys.D == (Keys)vkCode && Keys.Control == Control.ModifierKeys)
                {
                    return(new IntPtr(1));
                }
                else if (vkCode == WM_CONTEXTMENU || vkCode == 93 || vkCode == VK_APPS)
                {
                    return(new IntPtr(1));
                }
            }
            else if (nCode >= 0 && wParam == (IntPtr)WM_KEYPRESS)
            {
                int vkCode = Marshal.ReadInt32(lParam);
                Console.WriteLine(vkCode);
                if (Keys.D == (Keys)vkCode && Keys.Control == Control.ModifierKeys)
                {
                    return(new IntPtr(1));
                }
                else if (vkCode == WM_CONTEXTMENU || vkCode == 93 || vkCode == VK_APPS)
                {
                    return(new IntPtr(1));
                }
            }
            else if (nCode >= 0 && wParam == (IntPtr)WM_SYSKEYDOWN)
            {
                int vkCode = Marshal.ReadInt32(lParam);
                Console.WriteLine(vkCode);
                if (Keys.D == (Keys)vkCode && Keys.Control == Control.ModifierKeys)
                {
                    return(new IntPtr(1));
                }
                else if (vkCode == WM_CONTEXTMENU || vkCode == 93 || vkCode == VK_APPS)
                {
                    return(new IntPtr(1));
                }
            }
            else if (nCode >= 0 && wParam == (IntPtr)WM_SYSKEYUP)
            {
                int vkCode = Marshal.ReadInt32(lParam);
                Console.WriteLine(vkCode);
                if (Keys.D == (Keys)vkCode && Keys.Control == Control.ModifierKeys)
                {
                    return(new IntPtr(1));
                }
                else if (vkCode == WM_CONTEXTMENU || vkCode == 93 || vkCode == VK_APPS)
                {
                    return(new IntPtr(1));
                }
            }
            else if (nCode >= 0 && wParam == (IntPtr)WM_SYSKEYPRESS)
            {
                int vkCode = Marshal.ReadInt32(lParam);
                Console.WriteLine(vkCode);
                if (Keys.D == (Keys)vkCode && Keys.Control == Control.ModifierKeys)
                {
                    return(new IntPtr(1));
                }
                else if (vkCode == WM_CONTEXTMENU || vkCode == 93 || vkCode == VK_APPS)
                {
                    return(new IntPtr(1));
                }
            }
            return(CallNextHookEx(kbHookID, nCode, wParam, lParam));
            //return new IntPtr(1);
        }
Example #9
0
 public RemoteControlEventArgs()
 {
     _rcb = RemoteControlButton.Unknown;
     _device = InputDevice.Key;
 }
Example #10
0
 public RemoteControlEventArgs(RemoteControlButton rcb, InputDevice device)
 {
     _rcb = rcb;
     _device = device;
 }
Example #11
0
            private void ProcessInputCommand(ref Message message)
            {
                RemoteControlButton rcb = RemoteControlButton.Unknown;
                uint dwSize             = 0;

                GetRawInputData(message.LParam,
                                RID_INPUT,
                                IntPtr.Zero,
                                ref dwSize,
                                (uint)Marshal.SizeOf(typeof(RAWINPUTHEADER)
                                                     ));

                IntPtr buffer = Marshal.AllocHGlobal((int)dwSize);

                try
                {
                    if (buffer == IntPtr.Zero)
                    {
                        return;
                    }

                    if (GetRawInputData(message.LParam,
                                        RID_INPUT,
                                        buffer,
                                        ref dwSize,
                                        (uint)Marshal.SizeOf(typeof(RAWINPUTHEADER))) != dwSize
                        )
                    {
                        return;
                    }

                    RAWINPUT raw;

                    try
                    {
                        raw = (RAWINPUT)Marshal.PtrToStructure(buffer, typeof(RAWINPUT));
                    }
                    catch
                    {
                        //Cannot marshal field 'mouse' of type 'RAWINPUT': The type definition of this field has layout information but has an invalid managed/unmanaged type combination or is unmarshalable.
                        return;
                    }

                    if (raw.header.dwType == RIM_TYPEHID)
                    {
                        byte[] bRawData = new byte[raw.hid.dwSizHid];
                        int    pRawData = buffer.ToInt32() + Marshal.SizeOf(typeof(RAWINPUT)) + 1;

                        Marshal.Copy(new IntPtr(pRawData), bRawData, 0, raw.hid.dwSizHid - 1);
                        int rawData = bRawData[0] | bRawData[1] << 8;

                        switch (rawData)
                        {
                        case RAWINPUT_DETAILS:
                            rcb = RemoteControlButton.Details;
                            break;

                        case RAWINPUT_GUIDE:
                            rcb = RemoteControlButton.Guide;
                            break;

                        case RAWINPUT_TVJUMP:
                            rcb = RemoteControlButton.TVJump;
                            break;

                        case RAWINPUT_STANDBY:
                            rcb = RemoteControlButton.StandBy;
                            break;

                        case RAWINPUT_OEM1:
                            rcb = RemoteControlButton.OEM1;
                            break;

                        case RAWINPUT_OEM2:
                            rcb = RemoteControlButton.OEM2;
                            break;

                        case RAWINPUT_MYTV:
                            rcb = RemoteControlButton.MyTV;
                            break;

                        case RAWINPUT_MYVIDEOS:
                            rcb = RemoteControlButton.MyVideos;
                            break;

                        case RAWINPUT_MYPICTURES:
                            rcb = RemoteControlButton.MyPictures;
                            break;

                        case RAWINPUT_MYMUSIC:
                            rcb = RemoteControlButton.MyMusic;
                            break;

                        case RAWINPUT_RECORDEDTV:
                            rcb = RemoteControlButton.RecordedTV;
                            break;

                        case RAWINPUT_DVDANGLE:
                            rcb = RemoteControlButton.DVDAngle;
                            break;

                        case RAWINPUT_DVDAUDIO:
                            rcb = RemoteControlButton.DVDAudio;
                            break;

                        case RAWINPUT_DVDMENU:
                            rcb = RemoteControlButton.DVDMenu;
                            break;

                        case RAWINPUT_DVDSUBTITLE:
                            rcb = RemoteControlButton.DVDSubtitle;
                            break;
                        }

                        if (rcb != RemoteControlButton.Unknown)
                        {
                            this.ButtonPressed?.Invoke(this, new RemoteControlEventArgs(rcb, GetDevice(message.LParam.ToInt32())));
                        }
                    }
                    else if (raw.header.dwType == RIM_TYPEMOUSE)
                    {
                        // do mouse handling...
                    }
                    else if (raw.header.dwType == RIM_TYPEKEYBOARD)
                    {
                        // do keyboard handling...
                    }
                }
                finally
                {
                    Marshal.FreeHGlobal(buffer);
                }
            }