예제 #1
0
 /// <summary>Creates a ChordHotKey object.
 /// </summary>
 /// <param name="name">The unique identifier for this ChordHotKey.</param>
 /// <param name="basekey">The key to start the chord.</param>
 /// <param name="basemodifier">The modifier associated with the base key.</param>
 /// <param name="ChordHotKey">The LocalHotKey object to extract the chord key and modifier from.</param>
 /// <param name="enabled">Specifies that the hotkey is active,</param>
 public ChordHotKey(string name, Modifiers basemodifier, Keys basekey, LocalHotKey ChordHotKey, bool enabled)
 {
     Name          = name;
     BaseKey       = basekey;
     BaseModifier  = basemodifier;
     ChordKey      = ChordHotKey.Key;
     chordmodifier = ChordHotKey.Modifier;
     Enabled       = enabled;
 }
예제 #2
0
 /// <summary>Unregisters a LocalHotKey.
 /// </summary>
 /// <param name="hotKey">The hotKey to be removed</param>
 /// <returns>True if success, otherwise false</returns>
 public bool RemoveLocalHotKey(LocalHotKey hotKey)
 {
     if (Program.SysConfig.LocalHotKeyContainer.Remove(hotKey) == true)
     {
         --LocalHotKeyCount; return(true);
     }
     else
     {
         return(false);
     }
 }
예제 #3
0
        /// <summary>Checks if this Hotkey is equal to another ChordHotkey or LocalHotkey.
        /// </summary>
        /// <param name="obj">The Hotkey to compare</param>
        /// <returns>True if equal, false otherwise.</returns>
        public override bool Equals(object obj)
        {
            LocalHotKey lhotKey = obj as LocalHotKey;

            if (lhotKey != null)
            {
                return(Equals(lhotKey));
            }

            ChordHotKey hotkey = obj as ChordHotKey;

            if (hotkey != null)
            {
                return(Equals(hotkey));
            }

            return(false);
        }
예제 #4
0
        /// <summary>Registers a LocalHotKey.
        /// </summary>
        /// <param name="hotKey">The hotKey which will be added. Must not be null and can be registered only once.</param>
        /// <exception cref="HotKeyAlreadyRegisteredException">thrown if a LocalHotkey with the same name and or key and modifier has already been added.</exception>
        public bool AddLocalHotKey(LocalHotKey hotKey)
        {
            if (hotKey == null)
            {
                if (!this.SuppressException)
                {
                    throw new ArgumentNullException("value");
                }

                return(false);
            }
            if (hotKey.Key == 0)
            {
                if (!this.SuppressException)
                {
                    throw new ArgumentNullException("value.Key");
                }

                return(false);
            }

            //Check if a chord already has its BaseKey and BaseModifier.
            bool ChordExits = Program.SysConfig.ChordHotKeyContainer.Exists
                              (
                delegate(ChordHotKey f)
            {
                return(f.BaseKey == hotKey.Key && f.BaseModifier == hotKey.Modifier);
            }
                              );

            if (Program.SysConfig.LocalHotKeyContainer.Contains(hotKey) || ChordExits)
            {
                if (!this.SuppressException)
                {
                    throw new HotKeyAlreadyRegisteredException("HotKey already registered!", hotKey);
                }

                return(false);
            }

            Program.SysConfig.LocalHotKeyContainer.Add(hotKey);
            ++LocalHotKeyCount;
            return(true);
        }
예제 #5
0
        /// <summary>Checks if a HotKey has been registered.
        /// </summary>
        /// <param name="name">The name of the HotKey.</param>
        /// <returns>True if the HotKey has been registered, false otherwise.</returns>
        public bool HotKeyExists(string name)
        {
            LocalHotKey local = Program.SysConfig.LocalHotKeyContainer.Find
                                (
                delegate(LocalHotKey l)
            {
                return(l.Name == name);
            }
                                );

            if (local != null)
            {
                return(true);
            }

            ChordHotKey chord = Program.SysConfig.ChordHotKeyContainer.Find
                                (
                delegate(ChordHotKey c)
            {
                return(c.Name == name);
            }
                                );

            if (chord != null)
            {
                return(true);
            }

            GlobalHotKey global = Program.SysConfig.GlobalHotKeyContainer.Find
                                  (
                delegate(GlobalHotKey g)
            {
                return(g.Name == name);
            }
                                  );

            if (global != null)
            {
                return(true);
            }

            return(false);
        }
예제 #6
0
 public PreChordHotKeyEventArgs(LocalHotKey hotkey)
 {
     HotKey = hotkey;
 }
예제 #7
0
 public LocalHotKeyEventArgs(LocalHotKey hotKey)
 {
     HotKey = hotKey;
 }
예제 #8
0
 public HotKeyAlreadyRegisteredException(string message, LocalHotKey hotKey, Exception inner) : base(message, inner)
 {
     LocalKey = hotKey;
 }
예제 #9
0
        public bool PreFilterMessage(ref Message m)
        {
            if (!Enabled)
            {
                return(false);
            }

            //Check if the form that the HotKeyManager is registered to is inactive.
            if (DisableOnManagerFormInactive)
            {
                if (Form.ActiveForm != null && this.ManagerForm != Form.ActiveForm)
                {
                    return(false);
                }
            }

            //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;

            Modifiers LocalModifier = Modifiers.None;

            if (AltPressed)
            {
                LocalModifier = Modifiers.Alt;
            }
            if (ControlPressed)
            {
                LocalModifier |= Modifiers.Control;
            }
            if (ShiftPressed)
            {
                LocalModifier |= Modifiers.Shift;
            }

            switch ((KeyboardMessages)m.Msg)
            {
            case (KeyboardMessages.WmSyskeydown):
            case (KeyboardMessages.WmKeydown):
                Keys keydownCode = (Keys)(int)m.WParam & Keys.KeyCode;

                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(true);
                    }

                    ChordHotKey ChordMain = Program.SysConfig.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(true);
                    }

                    InChordMode = false;
                    new Microsoft.VisualBasic.Devices.Computer().Audio.PlaySystemSound(System.Media.SystemSounds.Exclamation);
                    return(true);
                }

                //Check for a LocalHotKey.
                LocalHotKey KeyDownHotkey = Program.SysConfig.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(KeyDownHotkey.SuppressKeyPress);
                }

                //Check for ChordHotKeys.
                ChordHotKey ChordBase = Program.SysConfig.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(true);
                }

                InChordMode = false;
                return(false);

            case (KeyboardMessages.WmSyskeyup):
            case (KeyboardMessages.WmKeyup):
                Keys keyupCode = (Keys)(int)m.WParam & Keys.KeyCode;

                if (KeyPressEvent != null)
                {
                    KeyPressEvent(this, new HotKeyEventArgs(keyupCode, LocalModifier, RaiseLocalEvent.OnKeyDown));
                }

                LocalHotKey KeyUpHotkey = Program.SysConfig.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(KeyUpHotkey.SuppressKeyPress);
                }
                return(false);

            case (KeyboardMessages.WmHotKey):
                //var lpInt = (int)m.LParam;
                //Keys Key = (Keys)((lpInt >> 16) & 0xFFFF);
                //Modifiers modifier = (Modifiers)(lpInt & 0xFFFF);

                int Id = (int)m.WParam;

                GlobalHotKey Pressed = Program.SysConfig.GlobalHotKeyContainer.Find
                                       (
                    delegate(GlobalHotKey g)
                {
                    return((g.Id == (int)Id));
                }
                                       );

                Pressed.RaiseOnHotKeyPressed();
                if (GlobalHotKeyPressed != null)
                {
                    GlobalHotKeyPressed(this, new GlobalHotKeyEventArgs(Pressed));
                }

                return(true);

            default: return(false);
            }
        }
예제 #10
0
 /// <summary>Compares this HotKey to another LocalHotKey.
 /// </summary>
 /// <param name="other">The LocalHotKey to compare.</param>
 /// <returns>True if equal, false otherwise.</returns>
 public bool Equals(LocalHotKey other)
 {
     return(BaseKey == other.Key && BaseModifier == other.Modifier);
 }
예제 #11
0
 /// <summary>Creates a ChordHotKey object.
 /// </summary>
 /// <param name="name">The unique identifier for this ChordHotKey.</param>
 /// <param name="basekey">The key to start the chord.</param>
 /// <param name="basemodifier">The modifier associated with the base key.</param>
 /// <param name="ChordHotKey">The LocalHotKey object to extract the chord key and modifier from.</param>
 public ChordHotKey(string name, Modifiers basemodifier, Keys basekey, LocalHotKey ChordHotKey) :
     this(name, basemodifier, basekey, ChordHotKey, true)
 {
 }