如何通过在桌面上绘图截屏来选择截屏区域?

How to do a screenshot area selection by drawing on desktop to take screenshot?

我想申请SS。但我对这个问题有疑问。我希望用户能够 select 一个特殊区域来截屏。我还希望桌面在用户 select 访问该区域时处于活动状态。例如,用户想要获取视频特定帧的 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);
    }

创建具有半透明(或全透明)背景的窗体,该窗体始终在最前面、无边框且与桌面大小相同。在该表单上做任何屏幕截图矩形选择图形(例如,选定的矩形 + 参考线 + 放大镜,完全不透明)。当用户选择时,隐藏表单并截图。