如何使用Win32截取當前屏幕截圖?如何在Windows應用程序中截取屏幕截圖?
41
A
回答
49
// 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
3
有一個MSDN示例Capturing an Image用於捕獲到DC的任意HWND(您可以嘗試將GetDesktopWindow的輸出傳遞給此DC)。但是,在Vista/Windows 7上的新桌面排版工具下,這種效果會有多好,我不知道。
24
- 使用
GetDC(NULL);
可以獲得整個屏幕的DC。 - 使用
CreateCompatibleDC
來獲得兼容的DC。使用CreateCompatibleBitmap
創建一個位圖來保存結果。使用SelectObject
來選擇位圖到兼容的DC中。 - 使用
BitBlt
從屏幕DC複製到兼容的DC。 - 取消選擇兼容DC中的位圖。
當您創建兼容位圖時,您希望它與屏幕DC兼容,而不兼容DC。 HTTPS:/
+1
雙顯示系統呢?兩個屏幕的鏡頭? – i486 2016-01-12 22:23:46
23
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. 截取應用程序中的屏幕截圖
- 2. Windows 8 cli截取屏幕截圖
- 3. 如何在iPhone應用中截取屏幕截圖?
- 4. 從我的應用程序截取設備的屏幕截圖
- 5. iphone - 截取其他應用程序的屏幕截圖?
- 6. C++截取屏幕截圖
- 7. 截取屏幕截圖
- 8. 在Windows Phone應用程序中禁用屏幕截圖工具
- 9. Windows Phone 7,獲取應用程序列表+屏幕截圖
- 10. 在Rails中截取屏幕截圖
- 11. QQ屏幕截圖應用程序
- 12. 應用程序屏幕截圖問題
- 13. AIR應用程序的屏幕截圖
- 14. 試圖在XNA中截取Windows Phone的屏幕截圖
- 15. 如何使用服務截取我的應用程序的屏幕截圖?
- 16. 屏幕截圖應用程序,可以在任何視圖中截圖
- 17. 如何獲取網絡應用程序的屏幕截圖
- 18. 如何在Winrt應用程序中創建屏幕截圖?
- 19. 如何使用CameraView在Android中截取屏幕截圖(SurfaceView)
- 20. SpriteKit屏幕截圖的屏幕截圖
- 21. 如何從android應用程序中禁用屏幕截圖?
- 22. 如何採取屏幕截圖和截屏保存在相冊
- 23. 如何讓屏幕截圖製作控制檯程序阻止屏幕截圖?
- 24. C++ Windows屏幕截圖
- 25. 使用screencap實用程序獲取屏幕截圖時的屏幕截圖使用screencap實用程序獲取屏幕截圖
- 26. 如何在Windows Form應用程序中獲取監視器的屏幕大小以捕獲屏幕截圖?
- 27. 如何在沒有root的Android 2.3.3中截取屏幕截圖?
- 28. 如何在wkhtmltoimage中截取屏幕截圖時指定大小?
- 29. 在應用程序內獲取屏幕截圖
- 30. iOS - 在應用程序崩潰之前採取屏幕截圖
捕捉屏幕 http://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen – hB0 2012-07-06 11:44:19
這裏是我的編譯要點各種方法/gist.github.com/rdp/9821698 – rogerdpack 2014-03-27 23:45:42