コード例 #1
0
 public ReferenceWindow(WindowHookManager winHook)
 {
     _winHook = winHook;
     _winHook.WindowFocusChanged += _winHook_WindowFocusChanged;
     _currentRefWindow            = IntPtr.Zero;
     _lastSwitched = IntPtr.Zero;
 }
コード例 #2
0
        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;
        }
コード例 #3
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <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;
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: i-e-b/WindowsJedi
        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();
            }
        }
コード例 #5
0
 public ConcentrationForm(WindowHookManager winHook)
 {
     Name     = "WindowsJedi Concentration Veil";
     _winHook = winHook;
 }