Идея в следующем. Необходимо в моменты времени, определенные таймером, фотографировать
экран рабочего стола с последующим сохранением в формате *.bmp. Как вы наверно догадались,
проектируется Spy-программа.
Re: Как сфотографировать экран рабочего стола Windows?
Здравствуйте, Orifiel, Вы писали:
O>Идея в следующем. Необходимо в моменты времени, определенные таймером, фотографировать O>экран рабочего стола с последующим сохранением в формате *.bmp.
GetDC( NULL );
быстренько скидываешь это в свой буфер, а потом в файл.
Re: Как сфотографировать экран рабочего стола Windows?
Здравствуйте, Orifiel, Вы писали:
O>Идея в следующем. Необходимо в моменты времени, определенные таймером, фотографировать O>экран рабочего стола с последующим сохранением в формате *.bmp.
Однако тут цифровой фотоаппарат нужен...
Вот пример с использованием GDI+, только он сохраняет в GIF, но это легко поправить. Инициализацию GDI+ и получение CLSID кодека лучше вынести в основную программу.
Если неохота связываться с GDI+ и BMP вполне устраивает, то поищи на сайте сообщение о сохранении в BMP с помощью OleSavePictureFile().
А вообще — баловство все это для детского сада и лучше такой чушью не заниматься.
Здравствуйте, algol, Вы писали:
A>Здравствуйте, Orifiel, Вы писали:
O>>Идея в следующем. Необходимо в моменты времени, определенные таймером, фотографировать O>>экран рабочего стола с последующим сохранением в формате *.bmp.
A>Однако тут цифровой фотоаппарат нужен...
A>Вот пример с использованием GDI+, только он сохраняет в GIF, но это легко поправить. Инициализацию GDI+ и получение CLSID кодека лучше вынести в основную программу. A>Если неохота связываться с GDI+ и BMP вполне устраивает, то поищи на сайте сообщение о сохранении в BMP с помощью OleSavePictureFile(). A>А вообще — баловство все это для детского сада и лучше такой чушью не заниматься. A>[ccode] A>#include <GdiPlus.h> A>using namespace Gdiplus; A>#include <wchar.h> A>int GetCodecClsid(const WCHAR* format, CLSID* pClsid);
A> LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) A> { A> RECT r; A> ::GetWindowRect(GetDesktopWindow(), &r); A> HDC dc = ::GetWindowDC(0); A> HDC memDC = ::CreateCompatibleDC(dc);
A> HBITMAP bm = ::CreateCompatibleBitmap(dc, r.right-r.left, r.bottom-r.top); A> HBITMAP oldbm = (HBITMAP) ::SelectObject(memDC, bm); A> ::BitBlt(memDC, 0, 0, r.right-r.left, r.bottom-r.top, dc, 0, 0, SRCCOPY); A> ::ReleaseDC(0, dc); A> ::SelectObject(memDC, oldbm); A> ::DeleteDC(memDC);
A> GdiplusStartupInput gdiplusStartupInput; A> ULONG_PTR gdiplusToken;
A> // Initialize GDI+ A> GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); A> { A> Bitmap img(bm, NULL); A> wchar_t fn[80]; A> swprintf(fn, L"img%04d.gif", cnt++); A> CLSID gifClsid; A> int result = GetCodecClsid(L"image/gif", &gifClsid); A> img.Save(fn, &gifClsid); A> } A> GdiplusShutdown(gdiplusToken);
A> return 0; A> }
A>int GetCodecClsid(const WCHAR* format, CLSID* pClsid) A>{ A> UINT num = 0; // number of image encoders A> UINT size = 0; // size of the image encoder array in bytes
A> ImageCodecInfo* pImageCodecInfo = NULL;
A> GetImageEncodersSize(&num, &size); A> if(size == 0) A> return -1; // Failure
A> pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); A> if(pImageCodecInfo == NULL) A> return -1; // Failure
A> GetImageEncoders(num, size, pImageCodecInfo);
A> for(UINT j = 0; j < num; ++j) A> { A> if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) A> { A> *pClsid = pImageCodecInfo[j].Clsid; A> return j; // Success A> } A> } // for
A> return -1; // Failure
A>} // GetCodecClsid A>Отнють не для детского сада. Программа разрабатывается для компьютеров, содержащих информацию для служебного пользования. Поэтому очень неплохо было бы видеть, кто и где копается. А вообще, не все ли равно, что програмить.
Re[3]: Как сфотографировать экран рабочего стола Windows?
Здравствуйте, Orifiel, Вы писали:
A>>Отнють не для детского сада. Программа разрабатывается для компьютеров, содержащих информацию для служебного пользования. Поэтому очень неплохо было бы видеть, кто и где копается.
Понятно, а скриншоты автоматом уходят за бугор нашим братьям по разуму.