Làm cách nào để chụp ảnh màn hình hiện tại bằng Win32?Làm cách nào để chụp ảnh màn hình trong ứng dụng cửa sổ?
Trả lời
// get the device context of the screen
HDC hScreenDC = CreateDC("DISPLAY", NULL, NULL, NULL);
// and a device context to put it in
HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
int width = GetDeviceCaps(hScreenDC, HORZRES);
int height = GetDeviceCaps(hScreenDC, VERTRES);
// maybe worth checking these are positive values
HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
// get a new bitmap
HBITMAP hOldBitmap = (HBITMAP) SelectObject(hMemoryDC, hBitmap);
BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);
hBitmap = (HBITMAP) SelectObject(hMemoryDC, hOldBitmap);
// clean up
DeleteDC(hMemoryDC);
DeleteDC(hScreenDC);
// now your image is held in hBitmap. You can save it or do whatever with it
Điều này hoạt động trên tất cả các cửa sổ dựa trên nt từ Windows NT4 đến Windows 7. – Woody
Tại sao bạn sử dụng CreateDC và không chỉ GetDC (NULL)? – Anders
Thành thực mà nói, tôi đã không xem xét nó trong một thời gian, đây là mã từ khá một cách mà tôi đã sử dụng trong một ứng dụng. Nó hoạt động trong mọi thứ vì vậy tôi chưa bao giờ quay lại với nó! Nếu GetDC tốt hơn, tôi có thể thêm vào câu trả lời. – Woody
Có mẫu MSDN, Capturing an Image, để chụp HWND tùy ý cho DC (bạn có thể thử chuyển đầu ra từ GetDesktopWindow đến đây). Nhưng làm thế nào tốt này sẽ làm việc theo compositor máy tính để bàn mới trên Vista/Windows 7, tôi không biết.
- Sử dụng
GetDC(NULL);
để nhận DC cho toàn bộ màn hình. - Sử dụng
CreateCompatibleDC
để nhận DC tương thích. - Sử dụng
CreateCompatibleBitmap
để tạo bitmap để giữ kết quả. - Sử dụng
SelectObject
để chọn bitmap vào DC tương thích. - Sử dụng
BitBlt
để sao chép từ màn hình DC sang DC tương thích. - Bỏ chọn bitmap từ DC tương thích.
Khi bạn tạo bitmap tương thích, bạn muốn nó tương thích với màn hình DC, không tương thích với DC.
Điều gì về hệ thống hiển thị kép? Shot của cả hai màn hình? – i486
void GetScreenShot(void)
{
int x1, y1, x2, y2, w, h;
// get screen dimensions
x1 = GetSystemMetrics(SM_XVIRTUALSCREEN);
y1 = GetSystemMetrics(SM_YVIRTUALSCREEN);
x2 = GetSystemMetrics(SM_CXVIRTUALSCREEN);
y2 = GetSystemMetrics(SM_CYVIRTUALSCREEN);
w = x2 - x1;
h = y2 - y1;
// copy screen to bitmap
HDC hScreen = GetDC(NULL);
HDC hDC = CreateCompatibleDC(hScreen);
HBITMAP hBitmap = CreateCompatibleBitmap(hScreen, w, h);
HGDIOBJ old_obj = SelectObject(hDC, hBitmap);
BOOL bRet = BitBlt(hDC, 0, 0, w, h, hScreen, x1, y1, SRCCOPY);
// save bitmap to clipboard
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();
// clean up
SelectObject(hDC, old_obj);
DeleteDC(hDC);
ReleaseDC(NULL, hScreen);
DeleteObject(hBitmap);
}
- 1. Làm cách nào để chụp ảnh màn hình của Cửa sổ Hoạt động trong Delphi?
- 2. Chụp ảnh màn hình nội dung cửa sổ cuộn
- 3. Làm cách nào để lập trình chụp ảnh màn hình của ứng dụng trong Linux?
- 4. Ảnh chụp màn hình của Python 2+ (cửa sổ)
- 5. Chụp ảnh màn hình lập trình trong mac chỉ cho cửa sổ ứng dụng
- 6. Ảnh chụp màn hình Webdriver
- 7. Ngăn chụp ảnh màn hình trong ứng dụng iOS
- 8. Chụp màn hình bỏ qua một số cửa sổ
- 9. Ảnh chụp màn hình mua hàng trong ứng dụng iPhone
- 10. C++ - Cách chụp ảnh màn hình, ngoại trừ một số cửa sổ
- 11. Làm cách nào để vẽ hình ảnh trên cửa sổ?
- 12. Chụp màn hình cửa hàng Windows App
- 13. Ứng dụng Qt MDI với OpenGL: cách lấy ảnh chụp màn hình hợp lệ?
- 14. Ảnh chụp màn hình X11 của cửa sổ hoạt động không thành công cho cửa sổ GTK
- 15. Làm cách nào để chụp ảnh màn hình/hình ảnh của trang web bằng Python?
- 16. Làm cách nào để chụp nhanh màn hình trong Java?
- 17. C# WPF chụp ảnh chụp màn hình với hiệu ứng SnippingTool
- 18. Ảnh chụp màn hình quy trình trong Windows Service
- 19. Làm cách nào để chụp "ảnh chụp màn hình" của NSView?
- 20. Làm cách nào để chụp màn hình hiện tại dưới dạng hình ảnh?
- 21. Làm thế nào để chụp một ảnh chụp màn hình trang web đầy đủ với C# và WebKit.NET?
- 22. Cách chụp ảnh màn hình trong .NET từ một ứng dụng web?
- 23. Cách chụp một phần của màn hình
- 24. iOS Ảnh chụp màn hình một phần của màn hình
- 25. Cửa sổ trong suốt (hoặc Vẽ ra màn hình) Không có Chuột chụp
- 26. Chụp ảnh màn hình với C \ GTK
- 27. Cách chụp ảnh màn hình bằng VBScript trong TestComplete?
- 28. iPad 3 ảnh chụp màn hình chậm
- 29. Chụp màn hình trong android
- 30. Cách sử dụng hình ảnh vector xaml làm nguồn hình ảnh trong ứng dụng cửa sổ 8
phương pháp khác nhau để chụp màn hình http://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen – hB0
Dưới đây là ý chính compilable tôi: https://gist.github.com/rdp/9821698 – rogerdpack