奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> VC >> 自动截屏到文件的小程序
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • VC中利用多线程技术实

  • 利用OpenGL实现三维绘

  • 基于Visual C++的Wins

  • 基于Visual C++6.0的D

  • Visual C++ MFC 中常用

  • 在MFC下如何定义全局变

  • 使用MFC在应用程序中嵌

  • VC++中进程与多进程管

  • 自动截屏到文件的小程序
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-22

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

    (二)准备工作
    1)建立VC CONSOLE APPLICATION,选择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);
    }

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

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.