private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { if (!Enabled) { return(IntPtr.Zero); } //For LocalHotKeys, determine if modifiers Alt, Shift and Control is pressed. Microsoft.VisualBasic.Devices.Keyboard UserKeyBoard = new Microsoft.VisualBasic.Devices.Keyboard(); bool AltPressed = UserKeyBoard.AltKeyDown; bool ControlPressed = UserKeyBoard.CtrlKeyDown; bool ShiftPressed = UserKeyBoard.ShiftKeyDown; ModifierKeys LocalModifier = ModifierKeys.None; if (AltPressed) { LocalModifier = ModifierKeys.Alt; } if (ControlPressed) { LocalModifier |= ModifierKeys.Control; } if (ShiftPressed) { LocalModifier |= ModifierKeys.Shift; } switch ((KeyboardMessages)msg) { case (KeyboardMessages.WmSyskeydown): case (KeyboardMessages.WmKeydown): Keys keydownCode = (Keys)(int)wParam; if (KeyPressEvent != null) { KeyPressEvent(this, new HotKeyEventArgs(keydownCode, LocalModifier, RaiseLocalEvent.OnKeyDown)); } //Check if a chord has started. if (InChordMode) { //Check if the Key down is a modifier, we'll have to wait for a real key. switch (keydownCode) { case Keys.Control: case Keys.ControlKey: case Keys.LControlKey: case Keys.RControlKey: case Keys.Shift: case Keys.ShiftKey: case Keys.LShiftKey: case Keys.RShiftKey: case Keys.Alt: case Keys.Menu: case Keys.LMenu: case Keys.RMenu: case Keys.LWin: return(IntPtr.Zero); } ChordHotKey ChordMain = ChordHotKeyContainer.Where( item => (item.BaseKey == PreChordKey && item.BaseModifier == PreChordModifier && item.ChordKey == keydownCode && item.ChordModifier == LocalModifier)) .FirstOrDefault(); // ChordHotKey ChordMain = ChordHotKeyContainer.Find // ( // delegate(ChordHotKey cm) // { // return ((cm.BaseKey == PreChordKey) && (cm.BaseModifier == PreChordModifier) && (cm.ChordKey == keydownCode) && (cm.ChordModifier == LocalModifier)); // } //); if (ChordMain != null) { ChordMain.RaiseOnHotKeyPressed(); if (ChordPressed != null && ChordMain.Enabled == true) { ChordPressed(this, new ChordHotKeyEventArgs(ChordMain)); } InChordMode = false; new Microsoft.VisualBasic.Devices.Computer().Audio.PlaySystemSound(System.Media.SystemSounds.Exclamation); return(IntPtr.Zero); } InChordMode = false; return(IntPtr.Zero); } //Check for a LocalHotKey. LocalHotKey KeyDownHotkey = (from items in LocalHotKeyContainer where items.Key == keydownCode && items.Modifier == LocalModifier where items.WhenToRaise == RaiseLocalEvent.OnKeyDown select items).FirstOrDefault(); //LocalHotKey KeyDownHotkey = LocalHotKeyContainer.Find // ( // delegate(LocalHotKey d) // { // return ((d.Key == keydownCode) && (d.Modifier == LocalModifier)); // } //); if (KeyDownHotkey != null) { KeyDownHotkey.RaiseOnHotKeyPressed(); if (LocalHotKeyPressed != null && KeyDownHotkey.Enabled == true) { LocalHotKeyPressed(this, new LocalHotKeyEventArgs(KeyDownHotkey)); } return(IntPtr.Zero); } //Check for ChordHotKeys. ChordHotKey ChordBase = System.Linq.Enumerable.Where( ChordHotKeyContainer, item => item.BaseKey == keydownCode && item.BaseModifier == LocalModifier) .FirstOrDefault(); //ChordHotKey ChordBase = ChordHotKeyContainer.Find // ( // delegate(ChordHotKey c) // { // return ((c.BaseKey == keydownCode) && (c.BaseModifier == LocalModifier)); // } //); if (ChordBase != null) { PreChordKey = ChordBase.BaseKey; PreChordModifier = ChordBase.BaseModifier; var e = new PreChordHotKeyEventArgs(new LocalHotKey(ChordBase.Name, ChordBase.BaseModifier, ChordBase.BaseKey)); if (ChordStarted != null) { ChordStarted(this, e); } InChordMode = !e.HandleChord; return(IntPtr.Zero); } InChordMode = false; return(IntPtr.Zero); case (KeyboardMessages.WmSyskeyup): case (KeyboardMessages.WmKeyup): Keys keyupCode = (Keys)(int)wParam; if (KeyPressEvent != null) { KeyPressEvent(this, new HotKeyEventArgs(keyupCode, LocalModifier, RaiseLocalEvent.OnKeyDown)); } LocalHotKey KeyUpHotkey = (from items in LocalHotKeyContainer where items.Key == keyupCode && items.Modifier == LocalModifier where items.WhenToRaise == RaiseLocalEvent.OnKeyUp select items).FirstOrDefault(); //LocalHotKey KeyUpHotkey = LocalHotKeyContainer.Find // ( // delegate(LocalHotKey u) // { // return ((u.Key == keyupCode) && (u.Modifier == LocalModifier)); // } //); if (KeyUpHotkey != null) { KeyUpHotkey.RaiseOnHotKeyPressed(); if (LocalHotKeyPressed != null && KeyUpHotkey.Enabled == true) { LocalHotKeyPressed(this, new LocalHotKeyEventArgs(KeyUpHotkey)); } return(IntPtr.Zero); } return(IntPtr.Zero); case KeyboardMessages.WmHotKey: GlobalHotKey Pressed = GlobalHotKeyContainer.Where(item => item.Id == (int)wParam).FirstOrDefault(); //GlobalHotKey Pressed = GlobalHotKeyContainer.Find // ( // delegate(GlobalHotKey g) // { // return (g.Id == (int)wParam); // } //); Pressed.RaiseOnHotKeyPressed(); if (GlobalHotKeyPressed != null) { GlobalHotKeyPressed(this, new GlobalHotKeyEventArgs(Pressed)); } break; } return(IntPtr.Zero); }
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { if (!Enabled) { return IntPtr.Zero; } //For LocalHotKeys, determine if modifiers Alt, Shift and Control is pressed. Microsoft.VisualBasic.Devices.Keyboard UserKeyBoard = new Microsoft.VisualBasic.Devices.Keyboard(); bool AltPressed = UserKeyBoard.AltKeyDown; bool ControlPressed = UserKeyBoard.CtrlKeyDown; bool ShiftPressed = UserKeyBoard.ShiftKeyDown; ModifierKeys LocalModifier = ModifierKeys.None; if (AltPressed) { LocalModifier = ModifierKeys.Alt; } if (ControlPressed) { LocalModifier |= ModifierKeys.Control; } if (ShiftPressed) { LocalModifier |= ModifierKeys.Shift; } switch ((KeyboardMessages)msg) { case (KeyboardMessages.WmSyskeydown): case (KeyboardMessages.WmKeydown): Keys keydownCode = (Keys)(int)wParam; if (KeyPressEvent != null) KeyPressEvent(this, new HotKeyEventArgs(keydownCode, LocalModifier, RaiseLocalEvent.OnKeyDown)); //Check if a chord has started. if (InChordMode) { //Check if the Key down is a modifier, we'll have to wait for a real key. switch (keydownCode) { case Keys.Control: case Keys.ControlKey: case Keys.LControlKey: case Keys.RControlKey: case Keys.Shift: case Keys.ShiftKey: case Keys.LShiftKey: case Keys.RShiftKey: case Keys.Alt: case Keys.Menu: case Keys.LMenu: case Keys.RMenu: case Keys.LWin: return IntPtr.Zero; } ChordHotKey ChordMain = ChordHotKeyContainer.Where( item => (item.BaseKey == PreChordKey && item.BaseModifier == PreChordModifier && item.ChordKey == keydownCode && item.ChordModifier == LocalModifier)) .FirstOrDefault(); // ChordHotKey ChordMain = ChordHotKeyContainer.Find // ( // delegate(ChordHotKey cm) // { // return ((cm.BaseKey == PreChordKey) && (cm.BaseModifier == PreChordModifier) && (cm.ChordKey == keydownCode) && (cm.ChordModifier == LocalModifier)); // } //); if (ChordMain != null) { ChordMain.RaiseOnHotKeyPressed(); if (ChordPressed != null && ChordMain.Enabled == true) ChordPressed(this, new ChordHotKeyEventArgs(ChordMain)); InChordMode = false; new Microsoft.VisualBasic.Devices.Computer().Audio.PlaySystemSound(System.Media.SystemSounds.Exclamation); return IntPtr.Zero; } InChordMode = false; return IntPtr.Zero; } //Check for a LocalHotKey. LocalHotKey KeyDownHotkey = (from items in LocalHotKeyContainer where items.Key == keydownCode && items.Modifier == LocalModifier where items.WhenToRaise == RaiseLocalEvent.OnKeyDown select items).FirstOrDefault(); //LocalHotKey KeyDownHotkey = LocalHotKeyContainer.Find // ( // delegate(LocalHotKey d) // { // return ((d.Key == keydownCode) && (d.Modifier == LocalModifier)); // } //); if (KeyDownHotkey != null) { KeyDownHotkey.RaiseOnHotKeyPressed(); if (LocalHotKeyPressed != null && KeyDownHotkey.Enabled == true) LocalHotKeyPressed(this, new LocalHotKeyEventArgs(KeyDownHotkey)); return IntPtr.Zero; } //Check for ChordHotKeys. ChordHotKey ChordBase = System.Linq.Enumerable.Where( ChordHotKeyContainer, item => item.BaseKey == keydownCode && item.BaseModifier == LocalModifier) .FirstOrDefault(); //ChordHotKey ChordBase = ChordHotKeyContainer.Find // ( // delegate(ChordHotKey c) // { // return ((c.BaseKey == keydownCode) && (c.BaseModifier == LocalModifier)); // } //); if (ChordBase != null) { PreChordKey = ChordBase.BaseKey; PreChordModifier = ChordBase.BaseModifier; var e = new PreChordHotKeyEventArgs(new LocalHotKey(ChordBase.Name, ChordBase.BaseModifier, ChordBase.BaseKey)); if (ChordStarted != null) ChordStarted(this, e); InChordMode = !e.HandleChord; return IntPtr.Zero; } InChordMode = false; return IntPtr.Zero; case (KeyboardMessages.WmSyskeyup): case (KeyboardMessages.WmKeyup): Keys keyupCode = (Keys)(int)wParam; if (KeyPressEvent != null) KeyPressEvent(this, new HotKeyEventArgs(keyupCode, LocalModifier, RaiseLocalEvent.OnKeyDown)); LocalHotKey KeyUpHotkey = (from items in LocalHotKeyContainer where items.Key == keyupCode && items.Modifier == LocalModifier where items.WhenToRaise == RaiseLocalEvent.OnKeyUp select items).FirstOrDefault(); //LocalHotKey KeyUpHotkey = LocalHotKeyContainer.Find // ( // delegate(LocalHotKey u) // { // return ((u.Key == keyupCode) && (u.Modifier == LocalModifier)); // } //); if (KeyUpHotkey != null) { KeyUpHotkey.RaiseOnHotKeyPressed(); if (LocalHotKeyPressed != null && KeyUpHotkey.Enabled == true) LocalHotKeyPressed(this, new LocalHotKeyEventArgs(KeyUpHotkey)); return IntPtr.Zero; } return IntPtr.Zero; case KeyboardMessages.WmHotKey: GlobalHotKey Pressed = GlobalHotKeyContainer.Where(item => item.Id == (int)wParam).FirstOrDefault(); //GlobalHotKey Pressed = GlobalHotKeyContainer.Find // ( // delegate(GlobalHotKey g) // { // return (g.Id == (int)wParam); // } //); Pressed.RaiseOnHotKeyPressed(); if (GlobalHotKeyPressed != null) GlobalHotKeyPressed(this, new GlobalHotKeyEventArgs(Pressed)); break; } return IntPtr.Zero; }