2
A
回答
0
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);
1
通過從GitHub上的代碼看,它似乎並不具有對於一個API(也許add it as a feature request?)。
雖然使用Screen
類和Graphics.CopyFromScreen
的組合,但您自己可以簡單地做到這一點。在this question的答案中有一些如何捕獲屏幕或活動窗口的例子。
3
我知道這是一個很老的帖子。但我雖然不能傷害更新它。 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();
相關問題
- 1. 以編程方式拍攝整個屏幕的屏幕截圖
- 2. 拍攝iOS中整個屏幕的屏幕截圖
- 3. Android - 拍攝屏幕截圖
- 4. 拍攝整個視圖的屏幕截圖(swift3)
- 5. 調整使用UIGraphicsBeginImageContextWithOptions拍攝的屏幕截圖調整大小
- 6. 使用Selenium拍攝屏幕截圖
- 7. 當拍攝屏幕截圖.mm文件沒有給出
- 8. 有沒有簡單的方法來自動截圖的拍攝?
- 9. 拍攝UIWebView的快照/屏幕截圖
- 10. 拍攝整個Internet Explorer文件的屏幕截圖
- 11. 在GLUT中拍攝屏幕截圖
- 12. 定期拍攝屏幕截圖
- 13. 在XNA中拍攝屏幕截圖
- 14. 如何拍攝終端屏幕截圖
- 15. 拍攝屏幕截圖(含root)
- 16. 以silverlight 5/xna拍攝屏幕截圖
- 17. 從flv視頻拍攝屏幕截圖
- 18. 有沒有辦法採取的屏幕截圖的MPMoviePlayerController播放
- 19. 有沒有什麼辦法可以在IE上使用selenium RC來捕獲整個頁面的屏幕截圖?
- 20. 如何在沒有X11或/ dev/fb0的Linux中拍攝屏幕截圖?
- 21. 有沒有辦法使用vba在MS-Access中截取屏幕截圖?
- 22. 有什麼方法可以拍攝qt元素的屏幕截圖嗎?
- 23. 在Windows Phone 8中拍攝鎖屏的屏幕截圖
- 24. 有沒有辦法在界面構建器中截取整個ViewController的屏幕截圖?
- 25. 拍攝Raspberry Pi上的UWP應用程序的屏幕截圖
- 26. 以整個屏幕的屏幕截圖
- 27. 如何使用HP UFT本機拍攝AUT的屏幕截圖?
- 28. 僅使用X11 lib拍攝C中的窗口屏幕截圖
- 29. MPMoviePlayerController拍攝屏幕截圖,但只顯示黑屏
- 30. 使用具有150%縮放比例的Graphics.CopyFromScreen拍攝屏幕截圖