void _winHook_WindowFocusChanged(object sender, WindowHandleEventArgs e) { if (_currentRefWindow == IntPtr.Zero) { return; } if (_currentRefWindow == e.WindowHandle) { return; } if (_lastSwitched == e.WindowHandle) { return; } using (var targw = Window.ForegroundWindow()) using (var refw = new Window(_currentRefWindow)) { _lastSwitched = targw.Handle; Direction[] tryOrder = { Direction.Left, Direction.Right, Direction.Down, Direction.Up }; foreach (var dir in tryOrder) { if (WindowArranger.MoveWindowRelativeScreenDirection(refw, targw, dir)) { break; } } refw.SendToFront(); targw.SendToFront(); } }
/// <summary> /// Event handler tries to force focused window to the front /// </summary> void winHook_WindowFocusChanged(object sender, WindowHandleEventArgs e) { if (!Win32.LockSetForegroundWindow(Win32.LSFW_UNLOCK)) { } if (_locking && (e.WindowHandle != Handle) && (e.WindowHandle != _currentWindow)) { SuspendLayout(); TopMost = true; Win32.BringWindowToTop(Handle); Win32.SetForegroundWindow(Handle); TopMost = false; Win32.BringWindowToTop(_currentWindow); Win32.SetForegroundWindow(_currentWindow); ResumeLayout(false); } if (!Win32.LockSetForegroundWindow(Win32.LSFW_LOCK)) { } }