C语言怎么实现截图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言怎么实现截图相关的知识,希望对你有一定的参考价值。

能实现么 求具体思路

1、用C语言实现windows程序截图,太麻烦。建议用C++做比较好。
2、截图例程:

#ifndef CAPTUREBLT
#define CAPTUREBLT 0x40000000
#endif
HBITMAP CaptureScreen(LPRECT lpRect)//lpRect为NULL时表示全屏幕截图

    HDC      hdc, hdcMem ;
    HBITMAP  hemfCopy ;
    HWND     hwndScr ;
    int      dstcx, dstcy ;
    if(lpRect)
    
        dstcx = lpRect->right - lpRect->left ;
        dstcy = lpRect->bottom - lpRect->top ;
    
    else
    
        dstcx = GetSystemMetrics(SM_CXSCREEN) ;
        dstcy = GetSystemMetrics(SM_CYSCREEN) ;
    
    if (LockWindowUpdate(hwndScr = GetDesktopWindow ()))
    
        hdc  = GetDCEx (hwndScr, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE) ;
        hdcMem = CreateCompatibleDC (hdc) ;
        if(NULL==hdcMem)
        
            ReleaseDC (hwndScr, hdc) ;
            LockWindowUpdate (NULL) ;
            return NULL;
        
        hemfCopy = CreateCompatibleBitmap (hdc, abs(dstcx), abs(dstcy)) ;
        if(NULL==hemfCopy)
        
            DeleteDC (hdcMem) ;
            ReleaseDC (hwndScr, hdc) ;
            LockWindowUpdate (NULL) ;
            return NULL;
        
        SelectObject (hdcMem, hemfCopy) ;
        if(lpRect)
            StretchBlt (hdcMem, 0, 0, abs(dstcx), abs(dstcy), 
                hdc, lpRect->left, lpRect->top, dstcx, dstcy, SRCCOPY|CAPTUREBLT) ;
        else
            BitBlt (hdcMem, 0, 0, dstcx, dstcy, 
                hdc, 0, 0, SRCCOPY|CAPTUREBLT) ;
        DeleteDC (hdcMem) ;
        ReleaseDC (hwndScr, hdc) ;
        LockWindowUpdate (NULL) ;
        return hemfCopy;
    
    return NULL;

参考技术A

    // MSDN 一下,GDI接口,GetSystemMetrics


#ifndef CAPTUREBLT

#define CAPTUREBLT 0x40000000

#endif

HBITMAP CaptureScreen(LPRECT lpRect)//lpRect为NULL时表示全屏幕截图

    HDC      hdc, hdcMem ;

    HBITMAP  hemfCopy ;

    HWND     hwndScr ;

    int      dstcx, dstcy ;

    if(lpRect)

   

        dstcx = lpRect->right - lpRect->left ;

        dstcy = lpRect->bottom - lpRect->top ;

   

    else

   

        dstcx = GetSystemMetrics(SM_CXSCREEN) ;

        dstcy = GetSystemMetrics(SM_CYSCREEN) ;

   

    if (LockWindowUpdate(hwndScr = GetDesktopWindow ()))

   

        hdc  = GetDCEx (hwndScr, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE) ;

        hdcMem = CreateCompatibleDC (hdc) ;

        if(NULL==hdcMem)

       

            ReleaseDC (hwndScr, hdc) ;

            LockWindowUpdate (NULL) ;

            return NULL;

       

        hemfCopy = CreateCompatibleBitmap (hdc, abs(dstcx), abs(dstcy)) ;

        if(NULL==hemfCopy)

       

            DeleteDC (hdcMem) ;

            ReleaseDC (hwndScr, hdc) ;

            LockWindowUpdate (NULL) ;

            return NULL;

       

        SelectObject (hdcMem, hemfCopy) ;

        if(lpRect)

            StretchBlt (hdcMem, 0, 0, abs(dstcx), abs(dstcy), 

                hdc, lpRect->left, lpRect->top, dstcx, dstcy, SRCCOPY|CAPTUREBLT) ;

        else

            BitBlt (hdcMem, 0, 0, dstcx, dstcy, 

                hdc, 0, 0, SRCCOPY|CAPTUREBLT) ;

        DeleteDC (hdcMem) ;

        ReleaseDC (hwndScr, hdc) ;

        LockWindowUpdate (NULL) ;

        return hemfCopy;

   

    return NULL;

本回答被提问者和网友采纳

c语言运行结果如何截屏

1 使用系统截屏功能。

需要使用按键print screen.在键盘上印的是prt sc。
单独使用该键,会截整个屏幕,如果用alt+prt sc,则会截取当前窗口的部分。

截屏后,数据会报存在剪贴板中,这时可以打开系统画图工具,或者任意图形编辑工具,粘贴。即可得到截屏后的数据,保存成文件即可。如果需要裁剪,也可以在这类工具中操作。

2 使用工具进行截屏。
目前提供快捷截屏的软件很多,比如qq,搜狗输入法,搜狗浏览器等都有截屏工具提供。
比如qq默认的截屏快捷键是ctrl+alt+a。同时按下三个键,会发现鼠标箭头变成彩色,这时点击并选择需要截屏的区域,双击即可完成截屏,将图片保存在内存中。
也可以在截屏后,直接保存成文件。
参考技术A 按Print Screen可以截全屏窗口的话用ALT+Print Screen当然你还可以使用QQ的截屏,那个挺好用的! 参考技术B 按Print Screen可以截全屏窗口的话用ALT+Print Screen 当然你可以用专业的截图工具,更加方便快速 参考技术C 你装个qq都可以截屏,截屏的快捷键是ctrl+alt+a键
并不光是截取c语言的屏幕,这种方法可以截取任何电脑的屏幕

以上是关于C语言怎么实现截图的主要内容,如果未能解决你的问题,请参考以下文章

c语言运行结果如何截屏

C语言实现NFA转DFA

c语言如何实现在给定文档中查找想要的单词或句子,就好像word中一样,50分求解!

C语言中 怎么实现双线程 或者 父子线程啊

C语言结果截屏如何操作啊?

C语言零基础,怎么用C语言实现CRC16检验码