且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-12-21 11:21:26

下面是一些code,让你开始:

Here's some code to get you started:

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);
}

它的工作原理,但需要改进:

It works, but needs improvement:


  • 您可能需要使用不同的机制来获得进程句柄(或至少做一些防御性编码)

  • 如果您的目标窗口不是在前台,你会最终有一个截图这是正确的大小/位置,而只是充满无论是在前台(你可能想给定的窗口拉进前台第一)

  • 您可能想要做其他的东西不仅仅是保存BMP到一个临时目录