获取特定应用程序的屏幕截图

我知道我可以使用Graphics.CopyFromScreen()获得整个屏幕的屏幕截图。但是,如果我只想要特定应用程序的屏幕截图怎么办?

回答:

以下是一些入门代码:

public void CaptureApplication(string procName)

{

var proc = Process.GetProcessesByName(procName)[0];

var rect = new User32.Rect();

User32.GetWindowRect(proc.MainWindowHandle, ref rect);

int width = rect.right - rect.left;

int height = rect.bottom - rect.top;

var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb);

Graphics graphics = Graphics.FromImage(bmp);

graphics.CopyFromScreen(rect.left, rect.top, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy);

bmp.Save("c:\\tmp\\test.png", ImageFormat.Png);

}

private class User32

{

[StructLayout(LayoutKind.Sequential)]

public struct Rect

{

public int left;

public int top;

public int right;

public int bottom;

}

[DllImport("user32.dll")]

public static extern IntPtr GetWindowRect(IntPtr hWnd, ref Rect rect);

}

可以,但是需要改进:

  • 您可能希望使用其他机制来获取进程句柄(或至少进行一些防御性编码)
  • 如果您的目标窗口不在前景中,您将得到截屏,该屏幕截图的大小/位置正确,但是将被前景中的所有内容填充(您可能希望先将给定的窗口拉入前景中) )
  • 除了将bmp保存到临时目录外,您可能还想做其他事情

以上是 获取特定应用程序的屏幕截图 的全部内容, 来源链接: utcz.com/qa/413689.html

回到顶部