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