#include <windows.h>
#include <iostream>
#include <comdef.h>
#include <atlbase.h>
#include <atlcomcli.h>
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
void SaveBitmapToJPG(HBITMAP hBitmap, const std::wstring& filename) {
Gdiplus::Bitmap bitmap(hBitmap, nullptr);
CLSID clsid;
Gdiplus::GetEncoderClsid(L"image/jpeg", &clsid);
bitmap.Save(filename.c_str(), &clsid, nullptr);
}
int main() {
// Inicializar GDI+
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, nullptr);
// Abrir Internet Explorer
CoInitialize(NULL);
{
CComPtr<IWebBrowser2> pBrowser;
HRESULT hr = pBrowser.CoCreateInstance(__uuidof(InternetExplorer));
if (SUCCEEDED(hr)) {
pBrowser->Visible = VARIANT_TRUE;
CComVariant url(L"http://example.com");
pBrowser->Navigate(url.bstrVal, nullptr, nullptr, nullptr, nullptr);
// Esperar a que la página se cargue
VARIANT_BOOL isBusy;
do {
pBrowser->get_Busy(&isBusy);
Sleep(100);
} while (isBusy);
// Capturar la pantalla
HWND hwnd = pBrowser->GetWindow();
HDC hdcWindow = GetDC(hwnd);
HDC hdcMem = CreateCompatibleDC(hdcWindow);
RECT rc;
GetClientRect(hwnd, &rc);
HBITMAP hBitmap = CreateCompatibleBitmap(hdcWindow, rc.right - rc.left, rc.bottom - rc.top);
SelectObject(hdcMem, hBitmap);
BitBlt(hdcMem, 0, 0, rc.right - rc.left, rc.bottom - rc.top, hdcWindow, 0, 0, SRCCOPY);
// Guardar como JPG
SaveBitmapToJPG(hBitmap, L"captura.jpg");
// Limpiar
DeleteObject(hBitmap);
DeleteDC(hdcMem);
ReleaseDC(hwnd, hdcWindow);
}
}
CoUninitialize();
Gdiplus::GdiplusShutdown(gdiplusToken);
return 0;
}