Есть ли API, который позволит мне сделать это в http://teststack.github.com/White/? Я не могу найти его.Есть ли способ сделать снимок экрана всего экрана с белым?
Благодаря
Pawel
Есть ли API, который позволит мне сделать это в http://teststack.github.com/White/? Я не могу найти его.Есть ли способ сделать снимок экрана всего экрана с белым?
Благодаря
Pawel
Проект White.Repository фактически записывает поток вашего теста со скриншотами, но он не очень хорошо документирован и еще не выпущен на NuGet (он скоро будет).
Лично я использую этот класс, который мы собрали из множества источников и забываем, откуда я его получил. Это фиксирует модальные диалоги и другие вещи, которые многие из других реализаций не захватили по какой-то причине.
/// <summary>
/// Provides functions to capture the entire screen, or a particular window, and save it to a file.
/// </summary>
public class ScreenCapture
{
[DllImport("gdi32.dll")]
static extern bool BitBlt(IntPtr hdcDest, int xDest, int yDest, int wDest, int hDest, IntPtr hdcSource, int xSrc, int ySrc, CopyPixelOperation rop);
[DllImport("user32.dll")]
static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDc);
[DllImport("gdi32.dll")]
static extern IntPtr DeleteDC(IntPtr hDc);
[DllImport("gdi32.dll")]
static extern IntPtr DeleteObject(IntPtr hDc);
[DllImport("gdi32.dll")]
static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);
[DllImport("gdi32.dll")]
static extern IntPtr CreateCompatibleDC(IntPtr hdc);
[DllImport("gdi32.dll")]
static extern IntPtr SelectObject(IntPtr hdc, IntPtr bmp);
[DllImport("user32.dll")]
public static extern IntPtr GetDesktopWindow();
[DllImport("user32.dll")]
public static extern IntPtr GetWindowDC(IntPtr ptr);
public Bitmap CaptureScreenShot()
{
var sz = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Size;
var hDesk = GetDesktopWindow();
var hSrce = GetWindowDC(hDesk);
var hDest = CreateCompatibleDC(hSrce);
var hBmp = CreateCompatibleBitmap(hSrce, sz.Width, sz.Height);
var hOldBmp = SelectObject(hDest, hBmp);
BitBlt(hDest, 0, 0, sz.Width, sz.Height, hSrce, 0, 0, CopyPixelOperation.SourceCopy | CopyPixelOperation.CaptureBlt);
var bmp = Image.FromHbitmap(hBmp);
SelectObject(hDest, hOldBmp);
DeleteObject(hBmp);
DeleteDC(hDest);
ReleaseDC(hDesk, hSrce);
return bmp;
}
}
Затем потреблять
var sc = new ScreenCapture();
var bitmap = sc.CaptureScreenShot();
bitmap.Save(fileName + ".png"), ImageFormat.Png);
От глядя через код на GitHub, это не кажется, есть API для этого (возможно add it as a feature request?).
Вы можете сделать это довольно просто самостоятельно, используя комбинацию классов Screen
и Graphics.CopyFromScreen
. Есть несколько примеров того, как захватить экран или активное окно в ответах на this question.
Я знаю, что это очень старый пост. Но я, однако, не могу обидеть его. TestStack.White выполняет следующие функции:
//Takes a screenshot of the entire desktop, and saves it to disk
Desktop.TakeScreenshot("C:\\white-framework.png", System.Drawing.Imaging.ImageFormat.Png);
//Captures a screenshot of the entire desktop, and returns the bitmap
Bitmap bitmap = Desktop.CaptureScreenshot();