我正在使用C#.NET截取第二台显示器内容的屏幕截图,并将其显示在主屏幕的窗口中。
我的代码是:
screenShotGraphics.CopyFromScreen(
Screen.AllScreens[screen].Bounds.X,
Screen.AllScreens[screen].Bounds.Y,
0,
0,
Screen.AllScreens[screen].Bounds.Size,
CopyPixelOperation.SourceCopy);
当按下按钮触发它时效果很好,因为稍微延迟不明显,但是当它自动运行时(比如每隔几秒钟),用户可以轻松地注意到他们的鼠标“锁定”了一些秒。
显然这并不理想。那么有更快的方法来执行此操作吗? (或者在不中断鼠标移动或交互的情况下执行它的方法?
答案 0 :(得分:2)
您可以尝试使用BackgroundWorker控件执行屏幕截图,这是在单独的线程上运行该功能的简便方法。只需在BackgroundWorker的DoWork事件中调用屏幕截图功能,只要您想运行函数,只需调用:
yourBackgroundWorker.RunWorkerAsync()
修改强> 它可能正在这样做,所以在屏幕上移动的任何东西(如鼠标)都不会模糊屏幕截图。您可以尝试将屏幕分成较小的部分并截取屏幕截图,然后将它们拼接在一起。这会释放鼠标在每个部分屏幕截图之间的移动,因为你在一个单独的线程上,但它会冒着屏幕上发生变化的风险(取决于它实际需要多长时间)
答案 1 :(得分:1)
尝试在主线程上进行调用,如果需要将图像保存到文件,请在另一个线程中执行...
我认为没有别的方法,因为CopyFromScreen,调用BitBlt api函数,如果你想通过api调用来做这个就必须调用那个...这就是Windows唯一的东西提供。