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;
    }
  • 相关阅读:
    NodeJS NPM 镜像使用方法
    用for; while...do; do...while; 写出九九乘法表
    create-react-app创建的项目中registerServiceWorker.js文件的作用
    前端应该从哪些方面优化网站?
    JS基础整理面试题
    netcore实践:跨平台动态加载native组件
    iOS开发--Swift RAC响应式编程初探
    算法导论学习笔记 (页码:9 ~ 16)
    iOS开发-- 通过runtime kvc 移除导航栏下方的阴影效果线条
    iOS开发--面试
  • 原文地址:https://www.cnblogs.com/ndyxb/p/12912733.html
Copyright © 2011-2022 走看看