public ReferenceWindow(WindowHookManager winHook) { _winHook = winHook; _winHook.WindowFocusChanged += _winHook_WindowFocusChanged; _currentRefWindow = IntPtr.Zero; _lastSwitched = IntPtr.Zero; }
public SwitcherForm(WindowHookManager winHook) { _winHook = winHook; _keyMgr = new KeyHookManager(); _keyMgr.KeyDown += keyMgr_KeyDown; _keyMgr.KeyUp += keyMgr_KeyUp; KeyPreview = true; _passThroughKeys = new Queue <PassThroughKey>(); _windows = new List <Window>(); _overlays = new List <Form>(); _winHook.WindowCreated += _winHook_WindowSetChanged; _winHook.WindowDestroyed += _winHook_WindowSetChanged; }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Initializes a new instance of the Oceanside.WinUI.Base.ExtWindow class. /// </summary> /// /// <param name="windowView"> The window root. </param> //////////////////////////////////////////////////////////////////////////////////////////////////// public ExtWindow(bool enableDoubleClickMaximize = true) { //Grab the handle and remove the built-in Win32 TitleBar and border Handle = this.As <IWindowNative>().WindowHandle; //This is how you hook WndProc using the helper classes. The helper classes will unhook // when you close the Window. Note that since the Window is already created, you are not // going to receive the WM_CREATE or WM_NCCREATE messages. _wndProcCallback = new WindowHookManager.WndProcCallback(WndProcCallback); WindowHookManager.AddWndProcCallback(Handle, _wndProcCallback); //NOTE that I hooked before calling InitializeComponent in an attempt to assure the custom // hook receives all messages possible. Under the covers, I don't know if this call causes // any WndProc messages, but we don't want to miss them if it does. InitializeComponent(); //Note that the WindowHandle is not a dependency property. IntPtr cannot be one and the // Window itself isn't a dependency object. So we just set the CLR property here. It // just has to be done before the behavior's associated object is loaded. DragMoveBehavior.WindowHandle = Handle; //Get rid of the built-in TitleBar and Window border Handle.HideWin32NonClientArea(); //A custom handler we fire when minimized/maximized and other states are entered. WindowStateChanged += ExtWindow_WindowStateChanged; if (enableDoubleClickMaximize) { RootContainer.DoubleTapped += RootContainer_DoubleTapped; } RootContainer.Loaded += RootContainer_Loaded; SizeChanged += ExtWindow_SizeChanged; }
static void Main() { InitialiseWinForms(); // Hook 'shell' events into the capturing form. Win32.RegisterShellHookWindow(ShellEventsDelegateForm.Handle); // TESTING: /*Console.WriteLine(DateTime.Now.ToString()); * using (var gf = new GifWriter(@"W:\work\tmp.gif", new Size(320,240))) * { * for (var x = 0; x < 100; x++) * { * gf.WriteScreenFrame(new Point(10+x, 10)); * } * } * Console.WriteLine(DateTime.Now.ToString());// manages about 30fps, almost regardless of capture size (up to a limit) */ // END TEST // Hook into system wide windowing events using (var winHook = new WindowHookManager()) { using (var switcherForm = new SwitcherForm(winHook)) using (var concentrationForm = new ConcentrationForm(winHook)) using (var popupWindows = new PopupWindows()) using (var pushback = new Pushback()) using (var arranger = new WindowArranger()) using (var experimental = new ReferenceWindow(winHook)) using (var hotKeys = new HotkeyCore()) { // General features hotKeys.Bind(new[] { Keys.LWin, Keys.Tab }, switcherForm.Toggle); hotKeys.Bind(new[] { Keys.LShiftKey, Keys.F12 }, concentrationForm.Toggle); hotKeys.Bind(new[] { Keys.RShiftKey, Keys.F12 }, concentrationForm.Toggle); hotKeys.Bind(new[] { Keys.LWin, Keys.Space }, popupWindows.ToggleVisibility); hotKeys.Bind(new[] { Keys.LControlKey, Keys.LWin, Keys.Space }, popupWindows.ToggleFade); hotKeys.Bind(new[] { Keys.LWin, Keys.Escape }, pushback.PushBackFrontWindow); // re-arrangement of top-window that breaks less things than the Windows built-in hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D1 }, arranger.SetTopLeft); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D2 }, arranger.SetTop); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D3 }, arranger.SetTopRight); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D4 }, arranger.SetLeft); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D5 }, arranger.SetCentre); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D6 }, arranger.SetRight); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D7 }, arranger.SetBottomLeft); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D8 }, arranger.SetBottom); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D9 }, arranger.SetBottomRight); // win-arrow to move screen hotKeys.Bind(new[] { Keys.LWin, Keys.Left }, arranger.MoveScreenLeft); hotKeys.Bind(new[] { Keys.LWin, Keys.Up }, arranger.MoveScreenUp); hotKeys.Bind(new[] { Keys.LWin, Keys.Right }, arranger.MoveScreenRight); hotKeys.Bind(new[] { Keys.LWin, Keys.Down }, arranger.MoveScreenDown); // Reference window hotKeys.Bind(new[] { Keys.LWin, Keys.OemMinus }, experimental.SetReferenceWindow); TrayIcon = new NotifyTrayApp("Windows Jedi", Resources.JediIcon, "https://github.com/i-e-b/WindowsJedi"); TrayIcon.AddMenuItem("Settings", delegate { new Settings().ShowDialog(); }); TrayIcon.AddMenuItem("Re-type file", delegate { new FileRetypeChooser().Show(); }); TrayIcon.AddMenuItem("Screen Capture to GIF", delegate { new ScreenCaptureForm().Show(); }); Application.ThreadException += Application_ThreadException; Application.Run(); } ShellEventsDelegateForm.Dispose(); } }
public ConcentrationForm(WindowHookManager winHook) { Name = "WindowsJedi Concentration Veil"; _winHook = winHook; }