资源简介
使用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
- 上一篇:C++写的SIS疾病传播模型模拟
- 下一篇:c/c++实现银行家算法模拟
相关资源
- 数据结构题集答案(C语言版)严蔚敏
- 图书管理系统C语言+数据结构与算法
- 列车时刻表管理源代码(C语言)
- 《数据结构(c语言版)习题答案》严
- C语言下用单链表实现一元多项式的四
- C语言课程设计五子棋游戏带源代码
- CRC8/CRC16/CRC32常见几个标准的算法及
- 国际象棋代码实现
- ifft的c语言编程
- 计算机图形学画月亮C语言
- c语言生成scale-free network
- 高斯函数消元法c语言源代码,解矩阵
- 机器人C语言代码的一个详细
- AD5420驱动C语言
- ftp客户端的C语言实现
- AMR-NB音频编码解码-源代码
- 简单的Linux下Ftp客户端C语言编写
- 基于51单片机的人体感应灯设计
- C语言上机考试经典100题--南开大学出
- RSA加解密算法 C语言实现
- 马踏棋盘C语言算法
- 基于Huffman树的文件压缩C语言源码数据
- 巴特沃斯低通滤波器的c语言实现
- C语言大作业班干选举系统
- 并发式聊天室C语言
- 用C语言实现NFA到DFA的转换过程
- 动态分区分配方式,C语言实现的
- C语言综合 里面含有八皇后问题,蓝
- 二叉排序树C语言版的!.c
- C语言实现telnet
评论
共有 条评论