如何通过在桌面上绘制来进行屏幕截图区域选择

本文关键字:屏幕截图 区域 选择 绘制 何通过 桌面 | 更新日期: 2023-09-27 18:27:35

我想制作一个SS应用程序。但我对这个问题有意见。我希望用户能够选择一个特殊的区域来截图。我还希望在用户选择区域时桌面处于活动状态。例如,用户想要拍摄视频的特定帧的SS。用户必须能够在播放视频时执行此操作。我已经尝试过直接在桌面上绘图。但它闪烁得太多了。我该如何解决这个问题,或者有其他方法吗?

我的代码:

    [DllImport("User32.dll")]
    static extern IntPtr GetDC(IntPtr hwnd);
    [DllImport("user32.dll")]
    static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase);
    public Form1()
    {
        InitializeComponent();
        this.Load += Form1_Load;
    }
    void Form1_Load(object sender, EventArgs e)
    {
        Start();
    }
    IntPtr handle;
    Graphics grp;
    void Start()
    {
        handle = GetDC(IntPtr.Zero);
        grp = Graphics.FromHdc(handle);
        grp.SmoothingMode = SmoothingMode.HighQuality;
        timer2.Start();
    }
    private void timer2_Tick(object sender, EventArgs e)
    {
        grp.DrawLine(Pens.Red, 0, Cursor.Position.Y, Screen.PrimaryScreen.Bounds.Width, Cursor.Position.Y);
        InvalidateRect(IntPtr.Zero, IntPtr.Zero, false);
    }

如何通过在桌面上绘制来进行屏幕截图区域选择

创建具有半透明(或完全透明)背景的表单,该背景始终位于顶部,无边框,大小与桌面相同。在该表单上执行任何屏幕截图矩形选择图形(例如,所选矩形+辅助线+放大镜,完全不透明)。当用户进行选择时,隐藏表单并进行屏幕截图。