C#获取WPF应用程序的截图

时间:2016-07-02 11:54:30

标签: c# wpf

我有WPF应用程序,我们希望使用后面的代码实现屏幕截图的功能。

每当我们想要时,我们应该能够在用户的机器上截取我们的应用程序(不是整个打印屏幕)

为此,我做了一些谷歌,发现DllImport("user32.dll")将在这方面帮助我。但是,我没有任何线索如何使用这个?我应该在这里提到哪种方法?

我尝试使用以下代码,但没有运气 -

[DllImport("User32.dll")]
public static extern int SetForegroundWindow(IntPtr point);
Process p = Process.GetCurrentProcess();
p.WaitForInputIdle();
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("k");
IntPtr processFoundWindow = p.MainWindowHandle;

请建议。

1 个答案:

答案 0 :(得分:1)

这是我之前在我的应用程序中使用的方法。

我创建了一个类来处理屏幕截图功能。

public sealed class snapshotHandler
{
    [StructLayout(LayoutKind.Sequential)]
    private struct RECT
    {
        public int m_left;
        public int m_top;
        public int m_right;
        public int m_bottom;
    }

    [DllImport("user32.dll")]
    private static extern IntPtr GetWindowRect(IntPtr hWnd, ref RECT rect);

    public static void Savesnapshot(IntPtr handle_)
    {
        RECT windowRect = new RECT();
        GetWindowRect(handle_, ref windowRect);

        Int32 width = windowRect.m_right - windowRect.m_left;
        Int32 height = windowRect.m_bottom - windowRect.m_top;
        Point topLeft = new Point(windowRect.m_left, windowRect.m_top);

        Bitmap b = new Bitmap(width, height);
        Graphics g = Graphics.FromImage(b);
        g.CopyFromScreen(topLeft, new Point(0, 0), new Size(width, height));
        b.Save(SNAPSHOT_FILENAME, ImageFormat.Jpeg);
    }
}

要使用上述功能,我调用SaveSnapshot方法。

SnapshotHandler.SaveSnapshot(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle);