测试鼠标指针在什么屏幕上
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");
}
我是一名 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");
}