• ActiveX网页截图插件


    该插件目前只提供截图功能,你可以继续优化截图的编辑功能。

    该插件使用js调用OpenScreen方法后启动截图功能,在截图功能启动后按键盘C键抓取屏幕,然后选中截取部分后双击选取将会完成截图,鼠标的右键为取消选中区域和取消已抓取的的屏幕。双击桌面右下角的文字可以关闭截图功能。

       /// <summary>
        /// 截图核心
        /// </summary>
        [Description("截图核心")]
        public class ScreenCore
        {
            #region
            /// <summary>
            /// 截图ActiveX
            /// </summary>
            public ActiveXScreen activeXScreen = null;
            /// <summary>
            /// 关闭窗体
            /// </summary>
            internal IcoForm icoForm = null;
            /// <summary>
            /// 截屏窗体
            /// </summary>
            internal ScreenForm screenForm = null;
            /// <summary>
            /// 截图状态
            /// </summary>
            public CaptureStatus captureStatus = CaptureStatus.Close;
            /// <summary>
            /// 键盘钩
            /// </summary>
            public HookUilt HookObject = null;
    
            /// <summary>
            /// 要截取的屏幕
            /// </summary>
            public Screen screen = null;
            /// <summary>
            /// 原始截图
            /// </summary>
            public Bitmap OriginalScreen = null;
            /// <summary>
            /// 蒙版截图
            /// </summary>
            public Bitmap MaskScreen = null;
    
            /// <summary>
            /// 截图边框厚度
            /// </summary>
            public int CatBoder = 1;
            /// <summary>
            /// 截图边框颜色
            /// </summary>
            public Color CatBodeColor = Color.YellowGreen;
            /// <summary>
            /// 截图边框点的外边距
            /// </summary>
            public int CatBoderDotMargin = 3;
            /// <summary>
            /// 截图边框Rect
            /// </summary>
            public ImageRectangle CatRect = null;
    
            /// <summary>
            /// 鼠标的类型
            /// </summary>
            public ScreenMoveTypes ScreenMoveType = ScreenMoveTypes.Normal;
            /// <summary>
            /// 鼠标按下的坐标
            /// </summary>
            public Point MoveDownPoint;
            /// <summary>
            /// 鼠标移动时的上一次坐标
            /// </summary>
            public Point MoveStartPoint;
    
            #endregion
    
            public ScreenCore(ActiveXScreen _activeXScreen)
            {
                this.activeXScreen = _activeXScreen;
    
                this.icoForm = new IcoForm(this);
                this.screenForm = new ScreenForm(this);
    
                this.HookObject = new HookUilt();
                this.HookObject.KeyDownHandler += new KeyEventHandler(this.Screen_KeyDown);
            }
    
            /// <summary>
            /// 键盘监听
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Screen_KeyDown(object sender, KeyEventArgs e)
            {
                switch (e.KeyCode)
                {
                    case Keys.C://截图
                        {
                            if (this.captureStatus == CaptureStatus.Open)
                            {
                                this.CaptureScreen();
                            }
                            break;
                        }
                    case Keys.Up://上移
                        {
                            if (this.captureStatus == CaptureStatus.Capture && this.IsCapture())
                            {
                                this.CatRect.Rect = new Rectangle(this.GetRectanglePoint(this.CatRect.Rect.X, this.CatRect.Rect.Y - 1), this.CatRect.Rect.Size);
                                this.InitializeRectangleDot();
                                this.screenForm.Invalidate();
                            }
                            break;
                        }
                    case Keys.Down://下移
                        {
                            if (this.captureStatus == CaptureStatus.Capture && this.IsCapture())
                            {
                                this.CatRect.Rect = new Rectangle(this.GetRectanglePoint(this.CatRect.Rect.X, this.CatRect.Rect.Y + 1), this.CatRect.Rect.Size);
                                this.InitializeRectangleDot();
                                this.screenForm.Invalidate();
                            }
                            break;
                        }
                    case Keys.Left://左移
                        {
                            if (this.captureStatus == CaptureStatus.Capture && this.IsCapture())
                            {
                                this.CatRect.Rect = new Rectangle(this.GetRectanglePoint(this.CatRect.Rect.X - 1, this.CatRect.Rect.Y), this.CatRect.Rect.Size);
                                this.InitializeRectangleDot();
                                this.screenForm.Invalidate();
                            }
                            break;
                        }
                    case Keys.Right://右移
                        {
                            if (this.captureStatus == CaptureStatus.Capture && this.IsCapture())
                            {
                                this.CatRect.Rect = new Rectangle(this.GetRectanglePoint(this.CatRect.Rect.X + 1, this.CatRect.Rect.Y), this.CatRect.Rect.Size);
                                this.InitializeRectangleDot();
                                this.screenForm.Invalidate();
                            }
                            break;
                        }
                }
            }
    
            /// <summary>
            /// 初始化截图边框信息
            /// </summary>
            /// <param name="moveStartPoint">截图边框开始坐标</param>
            /// <param name="moveEndPoint">截图边框结束坐标</param>
            public void InitializeRectangle(Point moveStartPoint, Point moveEndPoint)
            {
                Point point = new Point(Math.Min(moveStartPoint.X, moveEndPoint.X), Math.Min(moveStartPoint.Y, moveEndPoint.Y));
                Size size = new Size(Math.Abs(moveStartPoint.X - moveEndPoint.X), Math.Abs(moveStartPoint.Y - moveEndPoint.Y));
                this.CatRect.Rect = new Rectangle(point, size);
            }
            /// <summary>
            /// 初始化截图边框点信息
            /// </summary>
            public void InitializeRectangleDot()
            {
                int dot_width = this.CatBoderDotMargin * 2;
                this.CatRect.TopLeftRect = new Rectangle(this.CatRect.Rect.X - this.CatBoderDotMargin, this.CatRect.Rect.Y - this.CatBoderDotMargin, dot_width, dot_width);
                this.CatRect.TopMiddleRect = new Rectangle(this.CatRect.Rect.X + this.CatRect.Rect.Width / 2 - this.CatBoderDotMargin, this.CatRect.Rect.Y - this.CatBoderDotMargin, dot_width, dot_width);
                this.CatRect.TopRightRect = new Rectangle(this.CatRect.Rect.Right - this.CatBoderDotMargin, this.CatRect.Rect.Y - this.CatBoderDotMargin, dot_width, dot_width);
                this.CatRect.BottomLeftRect = new Rectangle(this.CatRect.Rect.X - this.CatBoderDotMargin, this.CatRect.Rect.Bottom - this.CatBoderDotMargin, dot_width, dot_width);
                this.CatRect.BottomMiddleRect = new Rectangle(this.CatRect.Rect.X + this.CatRect.Rect.Width / 2 - this.CatBoderDotMargin, this.CatRect.Rect.Bottom - this.CatBoderDotMargin, dot_width, dot_width);
                this.CatRect.BottomRightRect = new Rectangle(this.CatRect.Rect.Right - this.CatBoderDotMargin, this.CatRect.Rect.Bottom - this.CatBoderDotMargin, dot_width, dot_width);
                this.CatRect.MiddleLeftRect = new Rectangle(this.CatRect.Rect.X - this.CatBoderDotMargin, this.CatRect.Rect.Y + this.CatRect.Rect.Height / 2 - this.CatBoderDotMargin, dot_width, dot_width);
                this.CatRect.MiddleRightRect = new Rectangle(this.CatRect.Rect.Right - this.CatBoderDotMargin, this.CatRect.Rect.Y + this.CatRect.Rect.Height / 2 - this.CatBoderDotMargin, dot_width, dot_width);
            }
            /// <summary>
            /// 缩放截图边框
            /// </summary>
            /// <param name="moveStartPoint">缩放前鼠标坐标</param>
            /// <param name="moveEndPoint">缩放后鼠标坐标</param>
            public void ZoonRectangle(Point moveStartPoint, Point moveEndPoint)
            {
                int x = moveEndPoint.X - moveStartPoint.X;
                int y = moveEndPoint.Y - moveStartPoint.Y;
    
                #region 更新鼠标类型
                if (this.ScreenMoveType == ScreenMoveTypes.DownZoonTopLeft)
                {
                    this.CatRect.Rect = new Rectangle(this.CatRect.Rect.X + x, this.CatRect.Rect.Y + y, this.CatRect.Rect.Width - x, this.CatRect.Rect.Height - y);
                    if (this.CatRect.Rect.Width < 0 && this.CatRect.Rect.Height < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonBottomRight;
                    }
                    else if (this.CatRect.Rect.Width < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonTopRight;
                    }
                    else if (this.CatRect.Rect.Height < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonBottomLeft;
                    }
                }
                else if (this.ScreenMoveType == ScreenMoveTypes.DownZoonTopMiddle)
                {
                    this.CatRect.Rect = new Rectangle(this.CatRect.Rect.X, this.CatRect.Rect.Y + y, this.CatRect.Rect.Width, this.CatRect.Rect.Height - y);
                    if (this.CatRect.Rect.Height < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonBottomMiddle;
                    }
                }
                else if (this.ScreenMoveType == ScreenMoveTypes.DownZoonTopRight)
                {
                    this.CatRect.Rect = new Rectangle(this.CatRect.Rect.X, this.CatRect.Rect.Y + y, this.CatRect.Rect.Width + x, this.CatRect.Rect.Height - y);
                    if (this.CatRect.Rect.Width < 0 && this.CatRect.Rect.Height < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonBottomLeft;
                    }
                    else if (this.CatRect.Rect.Width < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonTopLeft;
                    }
                    else if (this.CatRect.Rect.Height < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonBottomRight;
                    }
                }
                else if (this.ScreenMoveType == ScreenMoveTypes.DownZoonBottomLeft)
                {
                    this.CatRect.Rect = new Rectangle(this.CatRect.Rect.X + x, this.CatRect.Rect.Y, this.CatRect.Rect.Width - x, this.CatRect.Rect.Height + y);
                    if (this.CatRect.Rect.Width < 0 && this.CatRect.Rect.Height < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonTopRight;
                    }
                    else if (this.CatRect.Rect.Width < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonBottomRight;
                    }
                    else if (this.CatRect.Rect.Height < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonTopLeft;
                    }
                }
                else if (this.ScreenMoveType == ScreenMoveTypes.DownZoonBottomMiddle)
                {
                    this.CatRect.Rect = new Rectangle(this.CatRect.Rect.X, this.CatRect.Rect.Y, this.CatRect.Rect.Width, this.CatRect.Rect.Height + y);
                    if (this.CatRect.Rect.Height < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonTopMiddle;
                    }
                }
                else if (this.ScreenMoveType == ScreenMoveTypes.DownZoonBottomRight)
                {
                    this.CatRect.Rect = new Rectangle(this.CatRect.Rect.X, this.CatRect.Rect.Y, this.CatRect.Rect.Width + x, this.CatRect.Rect.Height + y);
                    if (this.CatRect.Rect.Width < 0 && this.CatRect.Rect.Height < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonTopLeft;
                    }
                    else if (this.CatRect.Rect.Width < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonBottomLeft;
                    }
                    else if (this.CatRect.Rect.Height < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonTopRight;
                    }
                }
                else if (this.ScreenMoveType == ScreenMoveTypes.DownZoonMiddleLeft)
                {
                    this.CatRect.Rect = new Rectangle(this.CatRect.Rect.X + x, this.CatRect.Rect.Y, this.CatRect.Rect.Width - x, this.CatRect.Rect.Height);
                    if (this.CatRect.Rect.Width < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonMiddleRight;
                    }
    
                }
                else if (this.ScreenMoveType == ScreenMoveTypes.DownZoonMiddleRight)
                {
                    this.CatRect.Rect = new Rectangle(this.CatRect.Rect.X, this.CatRect.Rect.Y, this.CatRect.Rect.Width + x, this.CatRect.Rect.Height);
                    if (this.CatRect.Rect.Width < 0)
                    {
                        this.ScreenMoveType = ScreenMoveTypes.DownZoonMiddleLeft;
                    }
                }
                #endregion
    
                #region 更新截图边框防止匡高出现负数
                int x_tmp = this.CatRect.Rect.X;
                int y_tmp = this.CatRect.Rect.Y;
                int width_tmp = this.CatRect.Rect.Width;
                int height_tmp = this.CatRect.Rect.Height;
                if (this.CatRect.Rect.Width < 0)
                {
                    width_tmp = -1 * this.CatRect.Rect.Width;
                    x_tmp = this.CatRect.Rect.X - width_tmp;
                }
                if (this.CatRect.Rect.Height < 0)
                {
                    height_tmp = -1 * this.CatRect.Rect.Height;
                    y_tmp = this.CatRect.Rect.Y - height_tmp;
                }
                this.CatRect.Rect = new Rectangle(x_tmp, y_tmp, width_tmp, height_tmp);
                #endregion
    
            }
            /// <summary>
            /// 获取截图边框在屏幕的允许坐标中
            /// </summary>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <returns></returns>
            public Point GetRectanglePoint(int x, int y)
            {
                if (x < this.screen.Bounds.X)
                    x = this.screen.Bounds.X;
                if (x > this.screen.Bounds.Right - this.CatRect.Rect.Width)
                    x = this.screen.Bounds.Right - this.CatRect.Rect.Width;
    
                if (y < this.screen.Bounds.Y)
                    y = this.screen.Bounds.Y;
                if (y > this.screen.Bounds.Bottom - this.CatRect.Rect.Height)
                    y = this.screen.Bounds.Bottom - this.CatRect.Rect.Height;
                return new Point(x, y);
            }
    
            /// <summary>
            /// 打开截屏
            /// </summary>
            public void OpenScreen()
            {
                this.captureStatus = CaptureStatus.Open;
                this.icoForm.Show();
                this.screenForm.Hide();
                this.icoForm.LoadLocation();
                this.HookObject.Hook_Start();
            }
            /// <summary>
            /// 关闭截屏
            /// </summary>
            public void ColseScreen()
            {
                this.CatRect = null;
                this.DisposeImage(true, true);
                this.HookObject.Hook_Clear();
                this.icoForm.Hide();
                this.screenForm.Hide();
                this.captureStatus = CaptureStatus.Close;
            }
            /// <summary>
            /// 截屏
            /// </summary>
            private void CaptureScreen()
            {
                this.icoForm.Hide();
                this.screenForm.Hide();
                this.screen = Screen.FromControl(this.screenForm);
                this.screenForm.BackgroundImage = null;
                this.DisposeImage(true, true);
    
                //原图
                this.OriginalScreen = new Bitmap(this.screen.Bounds.Width, this.screen.Bounds.Height);
                Graphics g = Graphics.FromImage(this.OriginalScreen);
                g.CopyFromScreen(new Point(0, 0), new Point(0, 0), this.screen.Bounds.Size);
    
                //蒙版图
                this.MaskScreen = (Bitmap)this.OriginalScreen.Clone();
                g = Graphics.FromImage(this.MaskScreen);
                SolidBrush mask_sb = new SolidBrush(Color.FromArgb(150, 1, 1, 1));
                g.FillRectangle(mask_sb, this.screen.Bounds);
    
                mask_sb.Dispose();
                g.Dispose();
    
                this.screenForm.BackgroundImage = (Image)this.MaskScreen;
                this.screenForm.Location = this.screen.Bounds.Location;
                this.screenForm.Size = this.screen.Bounds.Size;
                this.screenForm.Show();
    
                this.captureStatus = CaptureStatus.Capture;
            }
    
            /// <summary>
            /// 释放截取的图片
            /// </summary>
            /// <param name="Original">是否释放原图</param>
            /// <param name="Mask">是否释放蒙版图</param>
            public void DisposeImage(bool Original, bool Mask)
            {
                if (Original && this.OriginalScreen != null)
                {
                    this.OriginalScreen.Dispose();
                    this.OriginalScreen = null;
                }
                if (Mask && this.MaskScreen != null)
                {
                    this.MaskScreen.Dispose();
                    this.MaskScreen = null;
                }
            }
            /// <summary>
            /// 获取截取的图片
            /// </summary>
            /// <returns></returns>
            public Bitmap GetCaptureImage()
            {
                Bitmap captureImage = new Bitmap(this.CatRect.Rect.Width, this.CatRect.Rect.Height);//选中截图
                using (Graphics g = Graphics.FromImage(captureImage))
                {
                    g.DrawImage(this.OriginalScreen, 0, 0, this.CatRect.Rect, GraphicsUnit.Pixel);
                    return captureImage;
                }
            }
            /// <summary>
            /// 获取截取的图片64为字符串
            /// </summary>
            /// <param name="bmp">截取的图片</param>
            /// <returns></returns>
            public string GetCaptureImageBase64String(Bitmap bmp)
            {
                string captureImageBase64 = "data:image/jpeg;base64,";
                using (MemoryStream ms = new MemoryStream())
                {
                    bmp.Save(ms, ImageFormat.Jpeg);
                    captureImageBase64 += Convert.ToBase64String(ms.ToArray());
                }
                return captureImageBase64;
            }
    
            /// <summary>
            /// 是否有截图边框
            /// </summary>
            /// <returnsshifou></returns>
            public bool IsCapture()
            {
                if (this.CatRect == null || this.CatRect.Rect.Width < 1 || this.CatRect.Rect.Height < 1)
                {
                    return false;
                }
                return true;
            }
        }

    源码下载地址:ActiveX网页截图插件.zip

  • 相关阅读:
    oracle常规操作
    shell 的算数运算
    sed 命令小结
    swing
    索引失效
    poj--1258--Agri-Net(最小生成树)
    CodeForces--626C--Block Towers (二分)
    Codeforces--629A--Far Relative’s Birthday Cake(暴力模拟)
    Codeforces--629B--Far Relative’s Problem(模拟)
    hdoj--5104--Primes Problem(素数打表)
  • 原文地址:https://www.cnblogs.com/tlmbem/p/12384592.html
Copyright © 2020-2023  润新知