Как сделать снимок экрана текущего экрана с помощью Win32?Как сделать снимок экрана в приложении Windows?
ответ
// 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
Это работает во всех окнах, основанных на nt, от Windows NT4 до Windows 7. – Woody
Почему вы используете CreateDC, а не только GetDC (NULL)? – Anders
Честно говоря, я не смотрел на это какое-то время, это код с довольно обратного пути, который я использовал в приложении. Он работает во всем, поэтому я никогда не возвращался к нему! Если GetDC будет лучше, я могу изменить ответ. – Woody
Существует образец MSDN, Capturing an Image, для записи произвольного HWND в DC (вы можете попробовать передать результат из GetDesktopWindow на это). Но насколько хорошо это будет работать под новым настольным компоновщиком на Vista/Windows 7, я не знаю.
- Используйте
GetDC(NULL);
, чтобы получить DC для всего экрана. - Используйте
CreateCompatibleDC
, чтобы получить совместимый DC. - Используйте
CreateCompatibleBitmap
, чтобы создать растровое изображение, чтобы сохранить результат. - Используйте
SelectObject
, чтобы выбрать растровое изображение в совместимый DC. - Используйте
BitBlt
для копирования с экрана DC на совместимый DC. - Снимите отметку с растрового изображения из совместимого DC.
При создании совместимого растрового изображения вы хотите, чтобы он совместим с экраном постоянного тока, а не с совместимым DC.
А как насчет двух дисплеев? Выстрел из обоих экранов? – 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. C: сделать снимок экрана
- 2. как сделать снимок экрана?
- 3. Сделайте снимок экрана в приложении
- 4. Как сделать снимок экрана в приложении для iPhone?
- 5. Сделать снимок экрана
- 6. Как сделать снимок экрана терминала
- 7. Как сделать снимок экрана ImageView?
- 8. Как сделать снимок с экрана?
- 9. Как сделать снимок экрана в wpf?
- 10. сделать снимок экрана
- 11. Pyqt сделать снимок экрана определенной области экрана
- 12. Как сделать снимок экрана в WP8
- 13. Как сделать снимок экрана в MonoGame для Windows?
- 14. Как сделать снимок экрана для Windows Phone 8.1 в WinRT?
- 15. Как сделать снимок экрана в Windows 7 с помощью python?
- 16. Как сделать снимок экрана окна виртуальной машины?
- 17. Способ сделать снимок экрана быстрее
- 18. Невозможно сделать снимок экрана в приложении Kivy, работающем на android
- 19. Как сделать снимок экрана с FireMonkey (многоплатформенные)
- 20. Как сделать снимок экрана приложения tkinter?
- 21. Как сделать снимок экрана в ios.
- 22. Как сделать снимок экрана в cuda?
- 23. как сделать снимок экрана в php codeigniter?
- 24. В bootstrap, как мне сделать снимок экрана?
- 25. Как сделать снимок экрана таблицы в HTML?
- 26. Как сделать снимок экрана программно в iOS?
- 27. Как сделать снимок экрана в CesiumJS?
- 28. Как программно сделать снимок экрана в iOS?
- 29. Как сделать снимок экрана UIElement в WPF
- 30. Как сделать снимок экрана в iPhone Cocos2D?
Различные методы для захвата экрана http://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen – hB0
Вот мой компилируется суть: HTTPS://gist.github.com/rdp/9821698 – rogerdpack