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.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; return IntPtr.Zero; } InChordMode = false; new Microsoft.VisualBasic.Devices.Computer().Audio.PlaySystemSound(System.Media.SystemSounds.Exclamation); return IntPtr.Zero; } //Check for a LocalHotKey. LocalHotKey KeyDownHotkey = LocalHotKeyContainer.Find ( delegate(LocalHotKey d) { return ((d.Key == keydownCode) && (d.Modifier == LocalModifier) && (d.WhenToRaise == RaiseLocalEvent.OnKeyDown)); } ); if (KeyDownHotkey != null) { KeyDownHotkey.RaiseOnHotKeyPressed(); if (LocalHotKeyPressed != null && KeyDownHotkey.Enabled == true) LocalHotKeyPressed(this, new LocalHotKeyEventArgs(KeyDownHotkey)); return IntPtr.Zero; } //Check for ChordHotKeys. 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 = LocalHotKeyContainer.Find ( delegate(LocalHotKey u) { return ((u.Key == keyupCode) && (u.Modifier == LocalModifier) && (u.WhenToRaise == RaiseLocalEvent.OnKeyUp)); } ); 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.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.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; return(IntPtr.Zero); } InChordMode = false; new Microsoft.VisualBasic.Devices.Computer().Audio.PlaySystemSound(System.Media.SystemSounds.Exclamation); return(IntPtr.Zero); } //Check for a LocalHotKey. LocalHotKey KeyDownHotkey = LocalHotKeyContainer.Find ( delegate(LocalHotKey d) { return((d.Key == keydownCode) && (d.Modifier == LocalModifier) && (d.WhenToRaise == RaiseLocalEvent.OnKeyDown)); } ); if (KeyDownHotkey != null) { KeyDownHotkey.RaiseOnHotKeyPressed(); if (LocalHotKeyPressed != null && KeyDownHotkey.Enabled == true) { LocalHotKeyPressed(this, new LocalHotKeyEventArgs(KeyDownHotkey)); } return(IntPtr.Zero); } //Check for ChordHotKeys. 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 = LocalHotKeyContainer.Find ( delegate(LocalHotKey u) { return((u.Key == keyupCode) && (u.Modifier == LocalModifier) && (u.WhenToRaise == RaiseLocalEvent.OnKeyUp)); } ); 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.Find ( delegate(GlobalHotKey g) { return(g.Id == (int)wParam); } ); Pressed.RaiseOnHotKeyPressed(); if (GlobalHotKeyPressed != null) { GlobalHotKeyPressed(this, new GlobalHotKeyEventArgs(Pressed)); } break; } return(IntPtr.Zero); }