Exemplo n.º 1
0
 public void Dispose()
 {
     Stop();
     m_keyHistory.Clear();
     KeyWhitelist.Clear();
     // ScopeHandle = IntPtr.Zero;
 }
Exemplo n.º 2
0
    private void HandleKey(VirtualKey keyShort)
    {
        if ((KeyWhitelist.Count > 0 && !KeyWhitelist.Contains(keyShort)))
        {
            return;
        }

        short shift = Native.GetAsyncKeyState(VirtualKey.SHIFT);
        short ctrl  = Native.GetAsyncKeyState(VirtualKey.CONTROL);
        short alt   = Native.GetAsyncKeyState(VirtualKey.MENU);

        bool shiftDown = IsVkDown(shift);
        bool ctrDown   = IsVkDown(ctrl);
        bool altDown   = IsVkDown(alt);

        ConsoleModifiers c = 0;

        if (shiftDown)
        {
            c |= ConsoleModifiers.Shift;
        }

        if (altDown)
        {
            c |= ConsoleModifiers.Alt;
        }

        if (ctrDown)
        {
            c |= ConsoleModifiers.Control;
        }

        short key     = Native.GetAsyncKeyState(keyShort);
        bool  keyPrev = IsVkPrevious(key);
        bool  keyDown = IsVkDown(key);

        bool stroke = m_keyHistory.ContainsKey(keyShort) &&
                      m_keyHistory[keyShort].IsDown &&
                      !keyDown;

        var args = new KeyEventArgs
        {
            Key        = keyShort,
            IsDown     = keyDown,
            IsPrevious = keyPrev,
            IsStroke   = stroke,
            Value      = key,
            Modifiers  = c
        };

        KeyEvent?.Invoke(null, args);

        if (args.IsStroke)
        {
            KeyStroke?.Invoke(null, args);
        }

        if (args.IsDown)
        {
            KeyDown?.Invoke(null, args);
        }


        m_keyHistory[args.Key] = args;
    }