截取虚拟屏幕(所有显示器)我正在尝试截取整个虚拟屏幕。这意味着,不只是主屏幕的图像,而是连接到计算机的每个屏幕。有没有办法做到这一点?我尝试使用它,但它不起作用:Bitmapb=newBitmap(SystemInformation.VirtualScreen.Width,SystemInformation.VirtualScreen.Height);图形g=Graphics.FromImage(b);this.Size=newSize(SystemInformation.VirtualScreen.Width,SystemInformation.VirtualScreen.Height);g.CopyFromScreen(0,0,0,0,b.Size);文档说:Graphics.CopyFromScreen(Int32,Int32,Int32,Int32,Size):执行从屏幕到图形的绘图表面颜色数据的blit传输,对应于像素矩形。“但是虚拟屏幕不必是矩形的:想象两个分辨率为1920x1200和1280x1024的显示器。所以您需要做的就是像您一样创建一个位图,然后枚举您的显示器并为每个ExecuteCopyFromScreen()创建一个位图。编辑:例如,如果您有两台显示器,其中一台的分辨率为1280x1024,位于1920x1200的左侧,那么前者的坐标将为(-1280,0)-(0,1024)...因此您需要执行memoryGraphics.CopyFromScreen(-1280,0,0,0,s);其中s是Size(1280,1024)。对于第二个,您需要调用memoryGraphics.CopyFromScreen(0,0,*1280*,0,s);而s将是Size(1920,1200)。希望这会有所帮助。就像Igor和Hans说的,你必须指出源坐标:图形screenGraph=Graphics.FromImage(screenshot);screenGraph.CopyFromScreen(SystemInformation.VirtualScreen.X,SystemInformation.VirtualScreen.Y,0,0,SystemInformation.VirtualScreen.Size,CopyPixelOperation.SourceCopy);Igor是对的,为SourceX/Y参数传递0,0是不正确的。遍历Screen.AllScreens属性中的Screen实例以找到边界矩形。请注意,CopyFromScreen()有一个错误,它无法捕获分层窗口(设置了TransparencyKey或Opacity的那种)。检查我在这个线程中的答案以获得解决方法。请注意,捕获整个桌面并不总是可行的,当屏幕没有排列成完美的矩形时,您会得到很多黑色,并且OutOfMemory异常在具有高分辨率显示器的32位计算机上并不少见。以上就是C#学习教程:捕获虚拟屏幕(所有显示器)共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
