コード例 #1
0
        KeyPress ToCarnacKeyPress(InterceptKeyEventArgs interceptKeyEventArgs)
        {
            var process = AssociatedProcessUtilities.GetAssociatedProcess();

            if (process == null)
            {
                return(null);
            }

            // see if this process is one being filtered for
            Regex filterRegex;

            if (ShouldFilterProcess(out filterRegex) && !filterRegex.IsMatch(process.ProcessName))
            {
                return(null);
            }

            var isLetter = interceptKeyEventArgs.IsLetter();
            var inputs   = ToInputs(isLetter, winKeyPressed, interceptKeyEventArgs).ToArray();

            try
            {
                string      processFileName = process.MainModule.FileName;
                ImageSource image           = IconUtilities.GetProcessIconAsImageSource(processFileName);
                return(new KeyPress(new ProcessInfo(process.ProcessName, image), interceptKeyEventArgs, winKeyPressed, inputs));
            }
            catch (Exception)
            {
                return(new KeyPress(new ProcessInfo(process.ProcessName), interceptKeyEventArgs, winKeyPressed, inputs));;
            }
        }
コード例 #2
0
ファイル: KeyPress.cs プロジェクト: zhangshilong520/carnac
 public KeyPress(ProcessInfo process, InterceptKeyEventArgs interceptKeyEventArgs, bool winkeyPressed, IEnumerable <string> input) :
     base(interceptKeyEventArgs.Key, winkeyPressed, interceptKeyEventArgs.ShiftPressed, interceptKeyEventArgs.AltPressed, interceptKeyEventArgs.ControlPressed)
 {
     Process = process;
     InterceptKeyEventArgs = interceptKeyEventArgs;
     Input = input;
 }
コード例 #3
0
        static IEnumerable <string> ToInputs(bool isLetter, bool isWinKeyPressed, InterceptKeyEventArgs interceptKeyEventArgs)
        {
            var controlPressed = interceptKeyEventArgs.ControlPressed;
            var altPressed     = interceptKeyEventArgs.AltPressed;
            var shiftPressed   = interceptKeyEventArgs.ShiftPressed;

            if (controlPressed)
            {
                yield return("Ctrl");
            }
            if (altPressed)
            {
                yield return("Alt");
            }
            if (isWinKeyPressed)
            {
                yield return("Win");
            }

            if (controlPressed || altPressed)
            {
                //Treat as a shortcut, don't be too smart
                if (shiftPressed)
                {
                    yield return("Shift");
                }

                yield return(interceptKeyEventArgs.Key.SanitiseLower());
            }
            else
            {
                yield return(interceptKeyEventArgs.Key.Sanitise());
            }
        }
コード例 #4
0
ファイル: KeyProvider.cs プロジェクト: DNIStream/carnac
        KeyPress ToCarnacKeyPress(InterceptKeyEventArgs interceptKeyEventArgs)
        {
            var process = AssociatedProcessUtilities.GetAssociatedProcess();

            if (process == null)
            {
                return(null);
            }

            Debug.WriteLine("processName: " + process.ProcessName);

            var filterRegex = GetRegEx();

            if (filterRegex != null && !filterRegex.IsMatch(process.ProcessName))
            {
                return(null);
            }

            var isLetter = interceptKeyEventArgs.IsLetter();
            var inputs   = ToInputs(isLetter, winKeyPressed, interceptKeyEventArgs).ToArray();

            try
            {
                string      processFileName = process.MainModule.FileName;
                ImageSource image           = IconUtilities.GetProcessIconAsImageSource(processFileName);
                return(new KeyPress(new ProcessInfo(process.ProcessName, image), interceptKeyEventArgs, winKeyPressed, inputs));
            }
            catch (Exception)
            {
                return(new KeyPress(new ProcessInfo(process.ProcessName), interceptKeyEventArgs, winKeyPressed, inputs));;
            }
        }
コード例 #5
0
        private KeyPress ToCarnacKeyPress(InterceptKeyEventArgs interceptKeyEventArgs)
        {
            var process = GetAssociatedProcess();

            var isLetter = interceptKeyEventArgs.Key >= Keys.A &&
                           interceptKeyEventArgs.Key <= Keys.Z;

            var inputs = ToInputs(isLetter, interceptKeyEventArgs);

            return(new KeyPress(process, interceptKeyEventArgs, winKeyPressed, inputs));
        }
コード例 #6
0
ファイル: KeyPress.cs プロジェクト: zhangshilong520/carnac
 public override int GetHashCode()
 {
     unchecked
     {
         int hashCode = base.GetHashCode();
         hashCode = (hashCode * 397) ^ (Process != null ? Process.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (InterceptKeyEventArgs != null ? InterceptKeyEventArgs.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Input != null ? Input.GetHashCode() : 0);
         return(hashCode);
     }
 }
コード例 #7
0
        private IEnumerable <string> ToInputs(bool isLetter, InterceptKeyEventArgs interceptKeyEventArgs)
        {
            var controlPressed = interceptKeyEventArgs.ControlPressed;
            var altPressed     = interceptKeyEventArgs.AltPressed;
            var shiftPressed   = interceptKeyEventArgs.ShiftPressed;

            if (controlPressed)
            {
                yield return("Ctrl");
            }
            if (altPressed)
            {
                yield return("Alt");
            }
            if (winKeyPressed)
            {
                yield return("Win");
            }

            if (controlPressed || altPressed)
            {
                //Treat as a shortcut, don't be too smart
                if (shiftPressed)
                {
                    yield return("Shift");
                }

                yield return(interceptKeyEventArgs.Key.Sanitise());
            }
            else
            {
                string input;
                var    shiftModifiesInput = interceptKeyEventArgs.Key.SanitiseShift(out input);

                if (!isLetter && !shiftModifiesInput && shiftPressed)
                {
                    yield return("Shift");
                }

                if (interceptKeyEventArgs.ShiftPressed && shiftModifiesInput)
                {
                    yield return(input);
                }
                else if (isLetter && !interceptKeyEventArgs.ShiftPressed)
                {
                    yield return(interceptKeyEventArgs.Key.ToString().ToLower());
                }
                else
                {
                    yield return(interceptKeyEventArgs.Key.Sanitise());
                }
            }
        }
コード例 #8
0
        private InterceptKeyEventArgs DetectWindowsKey(InterceptKeyEventArgs interceptKeyEventArgs)
        {
            if (interceptKeyEventArgs.Key == Keys.LWin || interceptKeyEventArgs.Key == Keys.RWin)
            {
                if (interceptKeyEventArgs.KeyDirection == KeyDirection.Up)
                {
                    winKeyPressed = false;
                }
                else if (interceptKeyEventArgs.KeyDirection == KeyDirection.Down)
                {
                    winKeyPressed = true;
                }
            }

            return(interceptKeyEventArgs);
        }
コード例 #9
0
        public bool CheckPasswordMode(InterceptKeyEventArgs key)
        {
            log.Enqueue(key);
            var sortedLog = log.ToList();

            sortedLog.Sort();
            var isMatch = sortedLog.SequenceEqual(PasswordKeyCombination, comparer);

            if (isMatch)
            {
                currentMode = !currentMode;
                this.log.Clear();
                return(true); //this way when the sequence is entered again to EXIT password mode, the key password keycombo doesn't show on screen
            }

            return(currentMode);
        }
コード例 #10
0
        KeyPress ToCarnacKeyPress(InterceptKeyEventArgs interceptKeyEventArgs)
        {
            var process = GetAssociatedProcess();

            var isLetter = interceptKeyEventArgs.IsLetter();
            var inputs   = ToInputs(isLetter, winKeyPressed, interceptKeyEventArgs).ToArray();

            try
            {
                string      processFileName = process.MainModule.FileName;
                ImageSource image           = IconUtilities.GetProcessIconAsImageSource(processFileName);
                return(new KeyPress(new ProcessInfo(process.ProcessName, image), interceptKeyEventArgs, winKeyPressed, inputs));
            }
            catch (System.Exception)
            {
                return(new KeyPress(new ProcessInfo(process.ProcessName), interceptKeyEventArgs, winKeyPressed, inputs));;
            }
        }
コード例 #11
0
 private bool IsModifierKeyPress(InterceptKeyEventArgs interceptKeyEventArgs)
 {
     return(modifierKeys.Contains(interceptKeyEventArgs.Key));
 }