Как захватить неактивное окно, используя slimdx
Прежде всего, я использую приведенный ниже код,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SlimDX.Direct3D9;
using SlimDX;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Runtime.InteropServices;
using System.IO;
using System.Collections.ObjectModel;
using KMPP;
using System.Diagnostics;
using System.Threading;
namespace KMPP
{
public class DxScreenCapture
{
Device d;
public DxScreenCapture()
{
PresentParameters present_params = new PresentParameters();
present_params.Windowed = true;
present_params.SwapEffect = SwapEffect.Discard;
d = new Device(new Direct3D(), 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.SoftwareVertexProcessing, present_params);
}
public Surface CaptureScreen()
{
Surface s = Surface.CreateOffscreenPlain(d, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Format.A8R8G8B8, Pool.Scratch);
d.GetFrontBufferData(0, s);
return s;
}
}
namespace WindowsFormsApplication4
{
static class Program
{
[STAThread]
static void Main()
{
Stopwatch stopwatch = new Stopwatch();
DateTime current = DateTime.Now;
string n = string.Format(@"text-{0:yyyy-MM-dd_hh-mm-ss-tt}.bmp", DateTime.Now);
string directory = (@"C:\temp\");
string name = (".bmp");
string filename = String.Format("{0:hh-mm-ss}{1}", DateTime.Now, name);
string path = Path.Combine(directory, filename);
stopwatch.Start();
Thread.Sleep(1000);
DxScreenCapture sc = new DxScreenCapture();
Surface s = sc.CaptureScreen();
Surface.ToFile(s, path, ImageFileFormat.Bmp);
stopwatch.Stop();
s.Dispose();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form());
}
}
}
}
Я получаю весь скриншот рабочего стола (код выше). затем, как я могу получить bmp конкретного неактивного окна? (это значит передать hwnd окна для захвата mathod и сохранить файл bmp в c:\inactive_window.bmp) это возможно?
пс. конкретная целевая программа связана с DirectX, поэтому я не могу получить скриншот, используя printwindow, bitblt и т. д. (этот метод просто возвращает черный экран bmpfile)