コード例 #1
0
ファイル: MainWindow.xaml.cs プロジェクト: zybexXL/Text-Grab
        private async void RegionClickCanvas_MouseUp(object sender, MouseButtonEventArgs e)
        {
            isSelecting = false;
            Matrix m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice;

            var mPt = GetMousePos();

            System.Windows.Point movingPoint = e.GetPosition(this);
            movingPoint.X *= m.M11;
            movingPoint.Y *= m.M22;



            movingPoint.X = Math.Round(movingPoint.X);
            movingPoint.Y = Math.Round(movingPoint.Y);

            if (mPt == movingPoint)
            {
                Debug.WriteLine("Probably on Screen 1");
            }

            double correctedLeft = this.Left;
            double correctedTop  = this.Top;

            if (correctedLeft < 0)
            {
                correctedLeft = 0;
            }

            if (correctedTop < 0)
            {
                correctedTop = 0;
            }

            double xDimScaled = (Canvas.GetLeft(selectBorder) * m.M11);
            double yDimScaled = (Canvas.GetTop(selectBorder) * m.M22);

            Rectangle regionScaled = new Rectangle(
                (int)xDimScaled,
                (int)yDimScaled,
                (int)(selectBorder.Width * m.M11),
                (int)(selectBorder.Height * m.M22));

            string grabbedText = "";

            // remove selectBorder before capture - force screen Re-render to actually remove it
            try { RegionClickCanvas.Children.Remove(selectBorder); } catch { }
            RegionClickCanvas.Background.Opacity = 0;
            RegionClickCanvas.UpdateLayout();
            RegionClickCanvas.Dispatcher.Invoke(() => { }, DispatcherPriority.Render);

            if (regionScaled.Width < 3 || regionScaled.Height < 3)
            {
                grabbedText = await GetClickedWord(new System.Windows.Point(xDimScaled, yDimScaled));
            }
            else
            {
                grabbedText = await GetRegionsText(regionScaled);
            }

            if (string.IsNullOrWhiteSpace(grabbedText) == false)
            {
                Clipboard.SetText(grabbedText);
                App.Current.Shutdown();
            }
            else
            {
                RegionClickCanvas.Background.Opacity = .2;
            }
        }