• 大小: 1KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: C/C++
  • 标签: C语言  源代码  

资源简介

使用C语言写远程屏幕监视程序,此处为关键代码,具体参考博文.

资源截图

代码片段和文件信息

/*以下代码为服务器和客户端连接后的
*其中ImageSock为用来通信的socket
*/
// Get the Screen DC
HDC hDC = GetDC( GetDesktopWindow() );
// Create a compatible DC
HDC hCpDC = CreateCompatibleDC( hDC );
// Create a compatible bitmap
HBITMAP hBmp = CreateCompatibleBitmap( hDC nScreenX nScreenY );
// Select the compatible bitmap into the compatible DC and get the old bitmap handle
HBITMAP hOldBmp = (HBITMAP)Selectobject( hCpDC hBmp );
// Copy the screen to the compatible DC
StretchBlt( hCpDC 0 0 nScreenX nScreenY hDC 0 0 nScreenX nScreenY SRCCOPY);
// Fullfill the BITMAPINFOHEADER structure
Getobject( hBmp sizeof(BITMAP) &bmp );
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biPlanes = 1;
bi.biWidth = bmp.bmWidth;
bi.biHeight = bmp.bmHeight;
bi.biCompression = BI_RGB;
bi.biSizeImage = bmp.bmHeight * bmp.bmWidthBytes;
bi.biBitCount = bmp.bmPlanes * bmp.bmBitsPixel;
bi.biXPelsPerMeter =   0;   
bi.biYPelsPerMeter =   0;   
bi.biClrUsed =   0;   
bi.biClrImportant =   0;
//为要传输的位图分配内存,计算所需内存大小
int nSize = sizeof(BITMAPINFOHEADER) + bi.biSizeImage;
// 分配内存
char *lp = (char *)( new byte[nSize] );
// 放位图的大小,用来通知客户端
char Buffer[1024] = {0};

while (1)
{
//  Copy the screen to the compatible DC
StretchBlt( hCpDC 0 0 nScreenX nScreenY hDC 0 0 nScreenX nScreenY SRCCOPY);
// Fullfill the BITMAPINFOHEADER structure
Getobject( hBmp sizeof(BITMAP) &bmp );
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biPlanes = 1;
bi.biWidth = bmp.bmWidth;
bi.biHeight = bmp.bmHeight;
bi.biCompression = BI_RGB;
bi.biSizeImage = bmp.bmHeight * bmp.bmWidthBytes;
bi.biBitCount = bmp.bmPlanes * bmp.bmBitsPixel;
bi.biXPelsPerMeter =   0;   
bi.biYPelsPerMeter =   0;   
bi.biClrUsed =   0;   
bi.biClrImportant =   0;
//复制BITMAPINFOHEADER信息到内存中
memcpy( lp &bi sizeof(BITMAPINFOHEADER) );

//复制具体的位图数据到内存中
if ( ERROR_INVALID_PARAMETER == GetDIBits( hCpDC hBmp 0 bmp.bmHeight lp + sizeof(BITMAPINFOHEADER) (LPBITMAPINFO) &bi DIB_RGB_COLORS ) )
{
printf( “[GetDIBits] error:ERROR_INVALID_PARAMETER\n“ );
continue;
}

// Receive the feedback
if ( 0 == recv( ImageSock Buffer 1024 0 ) )
break;
if ( strcmp( Buffer “200 OK“ ) )
break;
// Send the screen data
send( ImageSock lp nSize 0 );
}
ReleaseDC( GetDesktopWindow() hDC );
DeleteDC( hCpDC );
delete []lp;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2518  2009-02-14 19:59  CatchScreen.cpp

     文件        456  2009-02-14 20:02  Client.cpp

----------- ---------  ---------- -----  ----

                 2974                    2


评论

共有 条评论