Example Usage
void screenshot(string file) {
    ULONG_PTR gdiplustoken;
    GdiplusStartupInput gdistartupinput;
    GdiplusStartupOutput gdistartupoutput;
    gdistartupinput.SuppressBackgroundThread = true;
    GdiplusStartup(&gdiplustoken, &gdistartupinput, &gdistartupoutput);
    HDC dc = GetDC(GetDesktopWindow());
    HDC dc2 = CreateCompatibleDC(dc);
    RECT rc0kno;
    GetClientRect(GetDesktopWindow(), &rc0kno);
    int w = rc0kno.right - rc0kno.left;
    int h = rc0kno.bottom - rc0kno.top;
    HBITMAP hbitmap = CreateCompatibleBitmap(dc, w, h);
    HBITMAP holdbitmap = (HBITMAP)SelectObject(dc2, hbitmap);
    BitBlt(dc2, 0, 0, w, h, dc, 0, 0, SRCCOPY);
    Bitmap* bm = new Bitmap(hbitmap, NULL);
    UINT num, size;
    ImageCodecInfo* imagecodecinfo;
    GetImageEncodersSize(&num, &size);
    imagecodecinfo = (ImageCodecInfo*)(malloc(size));
    GetImageEncoders(num, size, imagecodecinfo);
    CLSID clsidEncoder;
    for (int i = 0; i < num; i++) {
        if (wcscmp(imagecodecinfo[i].MimeType, L"image/jpeg") == 0)
            clsidEncoder = imagecodecinfo[i].Clsid;
    }
    free(imagecodecinfo);
    wstring ws;
    ws.assign(file.begin(), file.end());
    bm->Save(ws.c_str(), &clsidE