zoukankan      html  css  js  c++  java
  • 桌面截屏

     

      

    //捕获桌面屏幕
    BOOL CFunction::ScreenCapture()
    {
        // 获取桌面窗口句柄
        HWND hDesktopWnd = ::GetDesktopWindow();
        if (hDesktopWnd == NULL)
        {
            return FALSE;
        }
    
        // 获取桌面窗口DC
        HDC hdc = ::GetDC(hDesktopWnd);
        if (hdc == NULL)
        {
            return FALSE;
        }
    
        // 创建兼容DC
        HDC mdc = ::CreateCompatibleDC(hdc);
        if (mdc == NULL)
        {
            return FALSE;
        }
    
        // 获取计算机屏幕的宽和高
        DWORD dwScreenWidth = ::GetSystemMetrics(SM_CXSCREEN);
        if (dwScreenWidth == NULL)
        {
            return FALSE;
        }
        DWORD dwScreenHeight = ::GetSystemMetrics(SM_CYSCREEN);
        if (dwScreenHeight == NULL)
        {
            return FALSE;
        }
    
        // 创建兼容位图
        HBITMAP bmp = ::CreateCompatibleBitmap(hdc, dwScreenWidth, dwScreenHeight);
        if (bmp == NULL)
        {
            return FALSE;
        }
    
        // 选中位图
        HBITMAP holdbmp = (HBITMAP)::SelectObject(mdc, bmp);
        if (holdbmp == NULL)
        {
            return FALSE;
        }
    
        // 将窗口内容绘制到位图上
        ::BitBlt(mdc, 0, 0, dwScreenWidth, dwScreenHeight, hdc, 0, 0, SRCCOPY);
    
        // 绘制鼠标
        PaintMouse(mdc);
    
        // 保存为图片
        SaveBmp(bmp);
    
        return TRUE;
    }
    
    //绘制鼠标
    BOOL CFunction::PaintMouse(HDC hdc)
    {
        // 创建兼容DC
        HDC bufdc = ::CreateCompatibleDC(hdc);
    
        //获取光标信息
        CURSORINFO cursorInfo = { sizeof(CURSORINFO) };
        ::GetCursorInfo(&cursorInfo);
    
        // 获取光标的图标信息
        ICONINFO iconInfo = { 0 };
        ::GetIconInfo(cursorInfo.hCursor, &iconInfo);
    
        // 绘制白底黑鼠标(AND)
        ::SelectObject(bufdc, iconInfo.hbmMask);
        ::BitBlt(hdc, cursorInfo.ptScreenPos.x, cursorInfo.ptScreenPos.y, 20, 20, bufdc, 0, 0, SRCAND);
    
        // 绘制黑底彩色鼠标(OR)
        ::SelectObject(bufdc, iconInfo.hbmColor);
        ::BitBlt(hdc, cursorInfo.ptScreenPos.x, cursorInfo.ptScreenPos.y, 20, 20,
            bufdc, 0, 0, SRCPAINT);
    
        // 释放资源
        DeleteObject(iconInfo.hbmColor);
        DeleteObject(iconInfo.hbmMask);
        DeleteDC(bufdc);
    
        return TRUE;
    }
    
    //保存为图片
    BOOL CFunction::SaveBmp(HBITMAP hBmp)
    {
        CImage image;
    
        // 附加位图句柄
        image.Attach(hBmp);
    
        // 保存成JPG格式图片
        image.Save(_T("mybmp1.jpg"));
    
        return TRUE;
    }
  • 相关阅读:
    Nginx之keepalived高可用工具
    Linux安装Nginx
    Nginx解决服务器宕机问题
    前端知识小札
    SQL入门(3):定义约束/断言assertion/触发器trigger
    SQL入门(2): Oracle内置函数-字符/数值/日期/转换/NVL/分析函数与窗口函数/case_decode
    Excel VBA入门(8): 快捷键/内置常量/代码调试/错误处理/代码优化
    小学生都看得懂的C语言入门(6): 字符串
    小学生都看得懂的C语言入门(5): 指针
    小学生都看得懂的C语言入门(4): 数组与函数
  • 原文地址:https://www.cnblogs.com/ndyxb/p/12912733.html
Copyright © 2011-2022 走看看