C# · 12月 23, 2021

c# – 捕获虚拟屏幕(所有显示器)

我正在尝试获取整个虚拟屏幕的屏幕截图.这意味着,不仅是主屏幕的图像,而且是连接到计算机的每个屏幕的图像.

有没有办法做到这一点?我尝试使用它,但它不起作用:

Bitmap b = new Bitmap(SystemInformation.VirtualScreen.Width,SystemInformation.VirtualScreen.Height);Graphics g = Graphics.FromImage(b);this.Size = new Size(SystemInformation.VirtualScreen.Width,SystemInformation.VirtualScreen.Height);g.CopyFromScreen(0,b.Size);解决方法 documentation说:Graphics.CopyFromScreen(Int32,Int32,Size):执行从屏幕到图形绘图表面的颜色数据的位块传输,对应于一个像素矩形.“但是虚拟屏幕不一定是矩形:想象两个具有1920×1200和1280×1024分辨率的显示器.所以你需要做的是像你一样创建一个位图,然后枚举你的显示器并为每个显示器执行CopyFromScreen().

编辑:例如,如果您有两台显示器,分辨率为1280×1024的显示器位于1920×1200左侧,则前者的坐标为(-1280,0) – (0,1024).因此,您需要执行memoryGraphics.CopyFromScreen(-1280,s);其中s是大小(1280,1024).对于第二个,你需要调用memoryGraphics.CopyFromScreen(0,* 1280 *,s);和s将是大小(1920年,1200年).希望这可以帮助.