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)); }
private void ProcessMouseCommand() { RemoteControlButton rcb = RemoteControlButton.Details; if (this.ButtonPressed != null && rcb != RemoteControlButton.Unknown) { this.ButtonPressed(this, new RemoteControlEventArgs(rcb, InputDevice.Mouse)); } }
public RemoteControlEventArgs() { _rcb = RemoteControlButton.Unknown; _device = InputDevice.Key; }
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); } }
public RemoteControlEventArgs(RemoteControlButton rcb, InputDevice device) { _rcb = rcb; _device = device; }
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))); } }
//------------------------------------------------------------- // 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))); } }
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); }
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); } }