public override bool Meets()
        {
            var processes = Process.GetProcessesByName(ForegroundProcessName);
            var handle    = HookAPI.GetForegroundWindow();

            return(processes.Where(proc => proc.MainWindowHandle == handle || GetChildWindows(proc.MainWindowHandle).Contains(handle)).Count() > 0);
        }
Exemplo n.º 2
0
 public static void SimulateKey(Keys key, bool press = true, bool release = true)
 {
     if (press)
     {
         HookAPI.keybd_event((byte)key, 0, (int)1, 0);
     }
     if (release)
     {
         HookAPI.keybd_event((byte)key, 0, (int)2, 0);
     }
 }
Exemplo n.º 3
0
        public override void Do()
        {
            var keys = new List <Keys>();

            if (ModifiersMask.HasFlag(KeyModifiers.Control) && !Hook.ActiveModifiers.HasFlag(KeyModifiers.Control))
            {
                keys.Add(Keys.LControlKey);
            }
            if (ModifiersMask.HasFlag(KeyModifiers.Shift) && !Hook.ActiveModifiers.HasFlag(KeyModifiers.Shift))
            {
                keys.Add(Keys.LShiftKey);
            }
            if (ModifiersMask.HasFlag(KeyModifiers.Alt) && !Hook.ActiveModifiers.HasFlag(KeyModifiers.Alt))
            {
                keys.Add(Keys.LMenu);
            }

            keys.Add(Key);

            if (string.IsNullOrEmpty(FocusProcessName))
            {
                foreach (var key in keys)
                {
                    SimulateKey(key, true, false);
                }
                foreach (var key in keys.Reverse <Keys>())
                {
                    SimulateKey(key, false, true);
                }
            }
            else
            {
                var foregroundWindow = HookAPI.GetForegroundWindow();
                var processes        = Process.GetProcessesByName(FocusProcessName);
                if (processes.Length == 0)
                {
                    return;
                }

                var parents = processes.Select(it => ParentProcessUtilities.GetParentProcess(it.Id)).Where(it => it != 0);
                var mains   = processes.Where(it => parents.Contains(it.Id)).ToList();

                foreach (var parent in mains)
                {
                    if (parent.MainWindowHandle == null)
                    {
                        continue;
                    }

                    HookAPI.SetForegroundWindow(parent.MainWindowHandle);
                    Thread.Sleep(200);

                    foreach (var key in keys)
                    {
                        SimulateKey(key, true, false);
                    }
                    foreach (var key in keys.Reverse <Keys>())
                    {
                        SimulateKey(key, false, true);
                    }

                    if (FirstOnly)
                    {
                        break;
                    }
                }
                if (foregroundWindow != IntPtr.Zero)
                {
                    HookAPI.SetForegroundWindow(foregroundWindow);
                }
            }
        }