提问人:kuybt6 提问时间:11/15/2023 更新时间:11/15/2023 访问量:53
如何通过套接字发送gdi plus数据?
How to send gdi plus data through socket?
问:
我正在构建一个远程帮助软件,例如团队查看器,我需要在我的服务器上接收客户端的屏幕。
我用来获取丝网打印并将其保存到:gdi plus
jpeg
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) {
using namespace Gdiplus;
UINT num = 0;
UINT size = 0;
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1;
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1;
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;
}
}
free(pImageCodecInfo);
return 0;
}
class frame_catcher
{
public:
int frame_catcher_func(){
using namespace Gdiplus;
IStream* istream;
HRESULT res = CreateStreamOnHGlobal(NULL, true, &istream);
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
{
HDC scrdc, memdc;
HBITMAP membit;
scrdc = ::GetDC(0);
int Height = GetSystemMetrics(SM_CYSCREEN);
int Width = GetSystemMetrics(SM_CXSCREEN);
memdc = CreateCompatibleDC(scrdc);
membit = CreateCompatibleBitmap(scrdc, Width, Height);
HBITMAP hOldBitmap =(HBITMAP) SelectObject(memdc, membit);
BitBlt(memdc, 0, 0, Width, Height, scrdc, 0, 0, SRCCOPY);
Gdiplus::Bitmap bitmap(membit, NULL);
CLSID clsid;
GetEncoderClsid(L"image/jpeg", &clsid);
bitmap.Save(L"print.jpeg", &clsid, NULL);
bitmap.Save(istream, &clsid, NULL);
delete &clsid;
DeleteObject(memdc);
DeleteObject(membit);
::ReleaseDC(0,scrdc);
}
GdiplusShutdown(gdiplusToken);
istream->Release();
return 0;
std::cout << "Print done" << std::endl;
}
};
我可以在代码中从哪里获得,idk,图像的“”,将其放入 a 并通过 发送?
顺便说一句,我是新手 - 对不起糟糕的编程 - 但我需要继续这样做;我正在制作我的毕业作品,无法改变它。谢谢大家。binaries
std::string
socket
c++
答: 暂无答案
评论
LPVOID ptr = GlobalLock(res);
ptr
GlobalUnlock(res);
std::string
vector<char>
string