2016-07-02 3 views
2

У меня есть приложение WPF, в котором мы хотели получить функциональность скриншота, используя код позади.C# Сделайте снимок экрана приложения WPF

Всякий раз, когда мы хотим, мы должны быть в состоянии взять скриншот нашего приложения на компьютере пользователя (не вся печать экрана)

Для этого я сделал некоторые Google и обнаружили, что DllImport("user32.dll") поможет мне в этом отношении. Однако, я не знаю, как это использовать? Какой метод я должен здесь отнести?

Я попытался с ниже код, но не luck-

[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; 

Пожалуйста Suggest.

+0

Похожие: http://stackoverflow.com/questions/24466482/how-to-take-a-screenshot-of-a-wpf-control –

+0

Вам не нужно выше кода. используйте «RenderTargetBitmap», чтобы получить окно в качестве изображения. –

+1

Вы хотите только захватить содержимое wpf (какой бы ни был ваш корневой элемент управления в окне) или же само окно, включая его заголовок кадра и верхние правые кнопки? –

ответ

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); 
+0

Отлично! Благодаря :) – Rohit