测试鼠标指针在什么屏幕上

Test what screen the mouse pointer is on

我是一名 JS/Node 开发人员,我的 C# 经验为零。我想写一个我可以从节点 运行 截取屏幕截图的 exe 文件会非常简单。问题是我只对鼠标光标当前所在的屏幕感兴趣。我找到了以下代码来截屏,但它只处理主屏幕。

Rectangle bounds = Screen.GetBounds(Point.Empty);

System.Diagnostics.Debug.WriteLine("asdf " + bounds.ToString());

using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
    using (Graphics g = Graphics.FromImage(bitmap))
    {
        g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
    }
    bitmap.Save("test.jpg", ImageFormat.Jpeg);
}

有没有办法检测鼠标光标在哪个屏幕上并截屏?

Welp :P 事实证明,只需将 GetBounds 中的点更改为鼠标位置并将 CopyFromScreen 中的点从正确的位置开始:

Rectangle bounds = Screen.GetBounds(Cursor.Position);
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
    using (Graphics g = Graphics.FromImage(bitmap))
    {
        g.CopyFromScreen(bounds.Location, Point.Empty, bounds.Size);
    }
    bitmap.Save("cap.png", ImageFormat.Png);
}

这里我得到了全局鼠标位置,并把它变成了一个矩形。

然后我检查了每个屏幕边界是否与鼠标位置相交。

从那里我有活动屏幕,所以我只需要截图。 希望对你有帮助。

private void takeScreenshot()
    {
        Bitmap screenshot;
        Graphics graphics;

        Rectangle mousePoint = new Rectangle(Cursor.Position, new Size(1, 1));

        Screen activeScreen = null;

        foreach (Screen s in Screen.AllScreens)
        {
            if (s.Bounds.IntersectsWith(mousePoint))
                activeScreen = s;
        }

        if (activeScreen == null)
            return;
        screenshot = new Bitmap(activeScreen.Bounds.Width, activeScreen.Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

        graphics = Graphics.FromImage(screenshot);

        graphics.CopyFromScreen(
            activeScreen.Bounds.X,
            activeScreen.Bounds.Y,
            0,
            0,
            activeScreen.Bounds.Size,
            CopyPixelOperation.SourceCopy);

        screenshot.Save(@"C:\Users\David\Desktop\screen.png");
    }