gpt4 book ai didi

c# - 在 .NET 中截取屏幕截图后出现运行时错误

转载 作者:行者123 更新时间:2023-11-30 20:08:44 24 4
gpt4 key购买 nike

给定以下代码

 public static Bitmap PrintWindow(IntPtr hWnd)
{
int width = GetWindowInfo(hWnd).rcWindow.Width;
int height = GetWindowInfo(hWnd).rcWindow.Height;
Logger.log("width and height: " + width + "," + height, 0);
Bitmap bmp = new Bitmap(width, height);
Graphics memoryGraphics = Graphics.FromImage(bmp);
memoryGraphics.CopyFromScreen(0, 0, 0, 0, GetWindowInfo(hWnd).rcWindow.Size);
return bmp;
}

我的应用程序为了屏幕抓取目的拍摄了大量屏幕截图。所以这个方法大约每3秒调用一次。它总是开始很好,但过了一会儿我在这里得到异常(exception)。如果我建立了容错能力(只是在出现异常时重试)它会继续运行,但我的日志显示很多失败的尝试。

以下是 3 个异常(exception):

Exception caught : System.ComponentModel.Win32Exception (0x80004005): The parameter is incorrect
at System.Drawing.Graphics.CopyFromScreen(Int32 sourceX, Int32 sourceY, Int32 destinationX, Int32 destinationY, Size blockRegionSize, CopyPixelOperation copyPixelOperation)
at System.Drawing.Graphics.CopyFromScreen(Int32 sourceX, Int32 sourceY, Int32 destinationX, Int32 destinationY, Size blockRegionSize)
at MoonHandler.scraping.User32Facade.PrintWindow(IntPtr hWnd) in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\scraping\User32Facade.cs:line 50
at MoonHandler.scraping.MoonFacade.getBMP(Boolean fresh) in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\scraping\MoonFacade.cs:line 37
at MoonHandler.scraping.MoonFacade.isWarpDriveActive() in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\scraping\MoonFacade.cs:line 154
at MoonHandler.logic.MoonLogic.warping_to_belt() in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\logic\MoonLogic.cs:line 113
at MoonHandler.logic.MoonLogic.act() in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\logic\MoonLogic.cs:line 47

Exception caught : System.ArgumentException: Parameter is not valid.
at System.Drawing.Graphics.GetHdc()
at System.Drawing.Graphics.CopyFromScreen(Int32 sourceX, Int32 sourceY, Int32 destinationX, Int32 destinationY, Size blockRegionSize, CopyPixelOperation copyPixelOperation)
at System.Drawing.Graphics.CopyFromScreen(Int32 sourceX, Int32 sourceY, Int32 destinationX, Int32 destinationY, Size blockRegionSize)
at MoonHandler.scraping.User32Facade.PrintWindow(IntPtr hWnd) in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\scraping\User32Facade.cs:line 50
at MoonHandler.scraping.MoonFacade.getBMP(Boolean fresh) in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\scraping\MoonFacade.cs:line 37
at MoonHandler.scraping.MoonFacade.isWarpDriveActive() in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\scraping\MoonFacade.cs:line 154
at MoonHandler.logic.MoonLogic.warping_to_belt() in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\logic\MoonLogic.cs:line 113
at MoonHandler.logic.MoonLogic.act() in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\logic\MoonLogic.cs:line 47

Exception caught : System.ArgumentException: Parameter is not valid.
at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)
at System.Drawing.Bitmap..ctor(Int32 width, Int32 height)
at MoonHandler.scraping.User32Facade.PrintWindow(IntPtr hWnd) in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\scraping\User32Facade.cs:line 48
at MoonHandler.scraping.MoonFacade.getBMP(Boolean fresh) in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\scraping\MoonFacade.cs:line 37
at MoonHandler.scraping.MoonFacade.isWarpDriveActive() in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\scraping\MoonFacade.cs:line 154
at MoonHandler.logic.MoonLogic.warping_to_belt() in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\logic\MoonLogic.cs:line 113
at MoonHandler.logic.MoonLogic.act() in d:\users\npiv\documents\visual studio 2010\Projects\MoonMiner\ConsoleApplication2\logic\MoonLogic.cs:line 47

我知道这是 3 个不同的异常,但我觉得它们是相互关联的。因为它只在运行时开始发生,这是某种内存泄漏吗?我可以用另一种方式截屏吗?

最佳答案

试试这个:

public static Bitmap PrintWindow(IntPtr hWnd)
{
sleep();
int width = GetWindowInfo(hWnd).rcWindow.Width;
int height = GetWindowInfo(hWnd).rcWindow.Height;
Logger.log("width and height: " + width + "," + height, 0);
Bitmap bmp = new Bitmap(width, height);

using (Graphics memoryGraphics = Graphics.FromImage(bmp))
memoryGraphics.CopyFromScreen(0, 0, 0, 0, GetWindowInfo(hWnd).rcWindow.Size);

return bmp;
}

关于c# - 在 .NET 中截取屏幕截图后出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6788276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com