Пример #1
0
        public void RecordEnd()
        {
            if (currState.Get() != State.RECORDING)
            {
                return;
            }
            currState.Set(State.IDLE);
            hideOverlayHandle.Notify();

            recKey   = null;
            recMouse = null;

            if (rec.Keyframes.Count > 0)
            {
                var last  = rec.Keyframes.Last;
                var sLast = last.Previous;

                Console.WriteLine(last.Value.ToString());
                Console.WriteLine(sLast.Value.ToString());
                if (sLast.Value.ToString().Contains("Shift") &&
                    last.Value.ToString().Contains("Escape"))
                {
                    rec.Keyframes.Remove(last);
                    rec.Keyframes.Remove(sLast);
                }
                ;
            }

            newRecordingHandle.Notify(rec);
            //Console.WriteLine(rec.ToString());
        }
Пример #2
0
        private void selectDelegate(OnMouseLocationSelected callback, Action <int, int> update)
        {
            show(MyColors.BLUE);

            Action loop = null;

            object syncLock    = new object();
            bool   followMouse = true;

            Hook.OnMouseDelegate mouseDown = null;
            mouseDown = (ma, x, y) =>
            {
                if (ma != MouseAction.WM_LBUTTONDOWN)
                {
                    return;
                }

                lock (syncLock)
                {
                    followMouse = false;
                }

                hide();

                System.Drawing.Point p = CursorMonitor.Position();
                Hook.I().RemoveMouseHook(mouseDown).ContinueWith((t) =>
                {
                    loop = () => { };
                    callback(p.X, p.Y);
                });
            };
            Hook.I().AddMouseHook(mouseDown);

            Hook.OnKeyDelegate keyU = (k) => { };
            Hook.OnKeyDelegate keyD = null;
            keyD = (k) =>
            {
                if (k != Key.Escape)
                {
                    return;
                }

                lock (syncLock)
                {
                    followMouse = false;
                }

                Dispatcher.Invoke(() =>
                {
                    WindowState = WindowState.Minimized;
                    Visibility  = Visibility.Hidden;
                });

                Hook.I().RemoveKeyHook(keyD, keyU).ContinueWith((t) =>
                {
                    return(Hook.I().RemoveMouseHook(mouseDown));
                }).ContinueWith((t) =>
                {
                    callback(0, 0, true);
                });
            };
            Hook.I().AddKeyHook(keyD, keyU);

            TextBlock coords = new TextBlock();

            coords.Foreground = new SolidColorBrush(Colors.Black);
            coords.Background = new SolidColorBrush(Colors.White);
            coords.Padding    = new Thickness(4);

            loop = () =>
            {
                Topmost = true;

                canvas.Children.Clear();
                System.Drawing.Point p = CursorMonitor.Position();
                p.X = p.X == 0 ? 0 : p.X - 2;
                p.Y = p.Y == 0 ? 0 : p.Y - 2;
                update(p.X, p.Y);

                Line h = new Line();
                h.Stroke          = new SolidColorBrush(BLUE);
                h.StrokeThickness = 2;
                h.X1 = 0; h.X2 = W;
                h.Y1 = p.Y; h.Y2 = p.Y;

                Line v = new Line();
                v.Stroke          = new SolidColorBrush(BLUE);
                v.StrokeThickness = 2;
                v.X1 = p.X; v.X2 = p.X;
                v.Y1 = 0; v.Y2 = H;

                coords.Text = p.X + ", " + p.Y;
                double fac    = 15;
                double coordX = W - p.X < coords.ActualWidth + fac ? W - (coords.ActualWidth + fac) : p.X + 4;
                double coordY = p.Y < coords.ActualHeight + fac ? coords.ActualHeight + fac : p.Y;

                Canvas.SetLeft(coords, coordX);
                Canvas.SetBottom(coords, H - coordY);

                canvas.Children.Add(h);
                canvas.Children.Add(v);
                canvas.Children.Add(coords);

                //return;
                lock (syncLock)
                {
                    if (!followMouse)
                    {
                        return;
                    }
                }

                Task.Delay(16).ContinueWith((t) =>
                {
                    Dispatcher.Invoke(() =>
                    {
                        loop();
                    });
                });
            };
            Dispatcher.Invoke(loop);
        }
Пример #3
0
        public void RecordBegin()
        {
            if (currState.Get() != State.IDLE)
            {
                return;
            }
            currState.Set(State.RECORDING);
            showOverlayHandle.Notify(MyColors.RED);

            rec    = new Recording();
            startT = Time.Millis();

            Func <long> GetTimestamp = () => { return(Time.Millis() - startT); };

            recKey = (d, k) =>
            {
                KeyActions ka;
                switch (k)
                {
                case Key.LeftAlt:
                case Key.RightAlt:
                case Key.LeftShift:
                case Key.RightShift:
                case Key.LeftCtrl:
                case Key.RightCtrl:
                case Key.LWin:
                case Key.RWin:
                    ka = d ? KeyActions.DOWN : KeyActions.UP;
                    break;

                default:
                    if (!d)
                    {
                        return;
                    }
                    ka = KeyActions.PRESS;
                    break;
                }

                rec.AddKeyframe(ka, k, GetTimestamp());
            };

            //bool ld = false, rd = false, md = false;
            int px = -1, py = -1;
            //Recording.KeyFrameM prevK;
            bool isLastMove = false;

            recMouse = (a, x, y) =>
            {
                //if (a == MouseAction.WM_LBUTTONDOWN) ld = true;
                //if (a == MouseAction.WM_RBUTTONDOWN) rd = true;
                //if (a == MouseAction.WM_MBUTTONDOWN) md = true;

                //if (a == MouseAction.WM_LBUTTONUP) ld = false;
                //if (a == MouseAction.WM_RBUTTONUP) rd = false;
                //if (a == MouseAction.WM_MBUTTONUP) md = false;

                if (a == MouseAction.WM_MOUSEMOVE /*&& !ld && !rd && !md*/)
                {
                    px         = x; py = y;
                    isLastMove = true;
                    return;
                }
                else
                {
                    if (isLastMove)
                    {
                        rec.AddKeyframe(MouseAction.WM_MOUSEMOVE, px, py, GetTimestamp() - 1);
                    }
                    isLastMove = false;
                }

                rec.AddKeyframe(a, x, y, GetTimestamp());
            };
        }