2009-02-10 71 views
34

Cách tốt nhất (dễ nhất) để chụp ảnh màn hình của ứng dụng đang chạy với C++ trong Windows là gì?Cách tốt nhất để chụp ảnh màn hình của Window bằng C++ trong Windows là gì?

+12

Nhấn nút 'In màn hình' trên bàn phím. –

+8

Câu hỏi này không đúng chủ đề như thế nào? Nó yêu cầu làm thế nào để làm điều đó theo lập trình, mà có vẻ khá liên quan đến tôi (và không phải là quá phổ biến). – jamesdlin

+3

Offtopic? Có thật không? – Nakilon

Trả lời

26

Bạn phải tải ngữ cảnh thiết bị của cửa sổ (GetWindowDC()) và sao chép hình ảnh (BitBlt()) từ đó. Tùy thuộc vào những gì khác bạn biết về ứng dụng, bạn sẽ sử dụng các phương pháp khác nhau để tìm tay cầm của cửa sổ nào để chuyển vào GetWindowDC().

+6

vui lòng thêm chi tiết về cách sử dụng GetWindowDC và BitBlt để nhận ảnh chụp màn hình. tôi cũng muốn có các chi tiết .... – jondinham

+0

Cần mã: (... – Sreekar

3

Trên tài liệu chức năng keybd_event, nó cho biết bạn có thể sử dụng nó để chụp ảnh màn hình và lưu vào khay nhớ tạm. Ví dụ:

keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_SILENT, 0); 

Trong phiên bản của tôi (Visual Studio 2005 được cài đặt trên máy tính), bạn có thể chụp ảnh toàn màn hình bằng cách đặt tham số thứ hai là 0 hoặc ảnh chụp màn hình ứng dụng hiện tại bằng cách đặt ứng dụng đó thành 1.

Lấy nó ra khỏi bộ nhớ đệm tạm được để lại dưới dạng bài tập cho người đọc.

Tuy nhiên tôi nghĩ kỹ trước khi thực hiện việc này vì nó sẽ chuyển bất kỳ dữ liệu hình ảnh nào đã có trong khay nhớ tạm.

+1

đó là sự kiện cho khóa PrintScr trên bàn phím. 'keybd_event' bạn đã nói không thể được sử dụng để chụp màn hình. một khái niệm sai sự hiểu biết! – jondinham

+2

@Paul Theo dõi liên kết tôi đã bao gồm và kiểm tra phần Ghi chú: "Ứng dụng có thể mô phỏng báo chí của phím PRINTSCRN để lấy ảnh màn hình và lưu vào khay nhớ tạm. Để thực hiện việc này, hãy gọi keybd_event với thông số bVk được đặt thành VK_SNAPSHOT. " – Daemin

+0

oh ok tôi thấy, không biết chúng tôi có thể mô phỏng báo chí của phím printscr :) – jondinham

0

Dưới đây là ví dụ code
Bạn có thể làm CaptureAnImage(GetDesktopWindow()); để chụp ảnh màn hình.

Các vấn đề liên quan