• 注册
  • 关于作者
    企业认证:趣记站长
    关注 6 粉丝 4 喜欢 9 内容 992
    江西省·南昌市
    聊天 送礼
    • 查看作者
    • 自动截屏到文件的小程序

      (一)功能

      实现了一个定时截取当前屏幕图像的小程序。

      (二)准备工作

      1)建立VC CONSOLE APPLICATION,

      Visual C++中使用OLE DB读写SQL Server简明指南
      VC++中利用/GS开关防止缓冲区溢出,VC实现系统热键激活后台服务程序,用Visual C++干干净净地清除进程,用Visual C++设计屏幕抓图程序,在VC中为应用程序添加图形超链接功能,详解Visual C++ 2005中的突破性变化,用VC++制作播放AVI视频流的动画按钮,在程序的状态栏中实现进度条,利用Visual C++设计自己的资源浏览器,VC++动态链接库编程之DLL木马,VC++编程实现对火焰的计算机动态仿真,VC中利用多线程技术实现线程之间的通信,利用OpenGL实现三维绘图,基于Visual C++的Winsock API研究,基于Visual C++6.0的DLL编程实现,Visual C++ MFC 中常用宏的含义,在MFC下如何定义全局变量和全局函数,使用MFC在应用程序中嵌入MS Word,VC++中进程与多进程管理的方法,Visual C++6.0 API函数操作技巧集
      Visual C++

      选择MFC SUPPORT

      2)在STDAFX.H文件中加入头文件:conio.h

      (三)主程序

      主程序代码如下:

              char Filename[100];

              int count = 0;

              while(!_kbhit())//用户按键则退出

              {

                  Sleep(5000);//挂起5秒

                  count ++;

                  

                  sprintf(Filename, "%d.bmp", count);

                  Screen(Filename);//调用Screen函数

              }

      以上代码每隔5秒钟调用一次函数Screen,将当前屏幕保存到文件中。

      (四)工作函数Screen

      Screen实现了当前屏幕内容到bmp文件的拷贝。

      源代码如下:

      void Screen(char filename[])

      {

          CDC *pDC;//屏幕DC

          pDC = CDC::FromHandle(GetDC(NULL));//获取当前整个屏幕DC

          int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL);//获得颜色模式

          int Width = pDC->GetDeviceCaps(HORZRES);

          int Height = pDC->GetDeviceCaps(VERTRES);

          cout << "当前屏幕色彩模式为" << BitPerPixel << "位色彩" << endl

               << "屏幕宽度:" << Width << endl

               << "屏幕高度:" << Height << endl << endl;

          

          CDC memDC;//内存DC

          memDC.CreateCompatibleDC(pDC);

          

          CBitmap memBitmap, *oldmemBitmap;//建立和屏幕兼容的bitmap

          memBitmap.CreateCompatibleBitmap(pDC, Width, Height);

          oldmemBitmap = memDC.SelectObject(&memBitmap);//将memBitmap选入内存DC

          memDC.BitBlt(0, 0, Width, Height, pDC, 0, 0, SRCCOPY);//复制屏幕图像到内存DC

          //以下代码保存memDC中的位图到文件

          BITMAP bmp;

          memBitmap.GetBitmap(&bmp);//获得位图信息

          

          FILE *fp = fopen(filename, "w+b");

          BITMAPINFOHEADER bih = {0};//位图信息头

          bih.biBitCount = bmp.bmBitsPixel;//每个像素字节大小

          bih.biCompression = BI_RGB;

          bih.biHeight = bmp.bmHeight;//高度

          bih.biPlanes = 1;

          bih.biSize = sizeof(BITMAPINFOHEADER);

          bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;//图像数据大小

          bih.biWidth = bmp.bmWidth;//宽度

          

          BITMAPFILEHEADER bfh = {0};//位图文件头

          bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位图数据的偏移量

          bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;//文件总的大小

          bfh.bfType = (WORD)0x4d42;

          

          fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);//写入位图文件头

          

          fwrite(&bih, 1, sizeof(BITMAPINFOHEADER), fp);//写入位图信息头

          

          byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight];//申请内存保存位图数据

          GetDIBits(memDC.m_hDC, (HBITMAP) memBitmap.m_hObject, 0, Height, p,

              (LPBITMAPINFO) &bih, DIB_RGB_COLORS);//获取位图数据

          fwrite(p, 1, bmp.bmWidthBytes * bmp.bmHeight, fp);//写入位图数据

          delete [] p;

          fclose(fp);

          memDC.SelectObject(oldmemBitmap);

      }

      (五)改进

      可以在系统热键中加入自定义热键,进行动态的(按用户需要的)截屏操作。  

      使用md5校验和算法保护文件
      VC++中利用/GS开关防止缓冲区溢出,VC实现系统热键激活后台服务程序,用Visual C++干干净净地清除进程,用Visual C++设计屏幕抓图程序,在VC中为应用程序添加图形超链接功能,详解Visual C++ 2005中的突破性变化,用VC++制作播放AVI视频流的动画按钮,在程序的状态栏中实现进度条,利用Visual C++设计自己的资源浏览器,VC++动态链接库编程之DLL木马,VC++编程实现对火焰的计算机动态仿真,VC中利用多线程技术实现线程之间的通信,利用OpenGL实现三维绘图,基于Visual C++的Winsock API研究,基于Visual C++6.0的DLL编程实现,Visual C++ MFC 中常用宏的含义,在MFC下如何定义全局变量和全局函数,使用MFC在应用程序中嵌入MS Word,VC++中进程与多进程管理的方法,Visual C++6.0 API函数操作技巧集
      Visual C++

    • 0
    • 0
    • 0
    • 46
    • 单栏布局 侧栏位置: