首页 > 其他分享 >简单截屏

简单截屏

时间:2023-05-13 14:08:01浏览次数:29  
标签:bih bfh height width 截屏 简单 sizeof NULL

#define MICROSOFT_WINDOWS_WINBASE_H_DEFINE_INTERLOCKED_CPLUSPLUS_OVERLOADS 0

#include <windows.h>


int WINAPI WinMain(

   _In_ HINSTANCE hInstance,

   _In_opt_ HINSTANCE hPrevInstance,

   _In_ LPSTR lpCmdLine,

   _In_ int nCmdShow)

{

   // 获取主显示设备上下文

   HDC hdcScreen = GetDC(NULL);


   // 为屏幕截图创建一个兼容的设备上下文

   HDC hdcCompatible = CreateCompatibleDC(hdcScreen);


   // 获取主显示器的尺寸

   int width = GetDeviceCaps(hdcScreen, HORZRES);

   int height = GetDeviceCaps(hdcScreen, VERTRES);


   // 为截图创建一个位图

   HBITMAP hBitmap = CreateCompatibleBitmap(hdcScreen, width, height);


   // 选择位图到兼容的设备上下文中

   HGDIOBJ hOldBitmap = SelectObject(hdcCompatible, hBitmap);


   // 将主显示器的内容复制到兼容的设备上下文中

   BitBlt(hdcCompatible, 0, 0, width, height, hdcScreen, 0, 0, SRCCOPY);


   // 将原始位图恢复到兼容的设备上下文中

   SelectObject(hdcCompatible, hOldBitmap);


   // 释放兼容的设备上下文

   DeleteDC(hdcCompatible);


   // 释放主显示设备上下文

   ReleaseDC(NULL, hdcScreen);


   // 将截图保存到文件中

   HANDLE hFile = CreateFile(TEXT("screenshot.bmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

   BITMAPFILEHEADER bfh;

   BITMAPINFOHEADER bih;

   DWORD dwBytesWritten;

   bfh.bfType = 0x4d42; // "BM"

   bfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + width * height * 4;

   bfh.bfReserved1 = 0;

   bfh.bfReserved2 = 0;

   bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

   bih.biSize = sizeof(BITMAPINFOHEADER);

   bih.biWidth = width;

   bih.biHeight = height;

   bih.biPlanes = 1;

   bih.biBitCount = 32;

   bih.biCompression = BI_RGB;

   bih.biSizeImage = 0;

   bih.biXPelsPerMeter = 0;

   bih.biYPelsPerMeter = 0;

   bih.biClrUsed = 0;

   bih.biClrImportant = 0;

   WriteFile(hFile, &bfh, sizeof(BITMAPFILEHEADER), &dwBytesWritten, NULL);

   WriteFile(hFile, &bih, sizeof(BITMAPINFOHEADER), &dwBytesWritten, NULL);

   unsigned char* pData = (unsigned char*)malloc(width * height * 4);

   if (pData != NULL) {

       GetBitmapBits(hBitmap, width * height * 4, pData);

       WriteFile(hFile, pData, width * height * 4, &dwBytesWritten, NULL);

   }

   

   free(pData);

   CloseHandle(hFile);


   return 0;

}

标签:bih,bfh,height,width,截屏,简单,sizeof,NULL
From: https://blog.51cto.com/u_1685766/6273661

相关文章

  • 最简单的canal 1.1.6服务搭建方法
    前言:    因为在项目中集成了ElasticSearch,用于某些业务场景的搜素或筛选。这里关于ElasticSearch就不做介绍了,虽然解决了全文搜索的性能问题。但是当出现一些频繁更新的数据放置在ES就有点麻烦了。    这时候,一款能把MySQL数据即时同步到ElasticSearch的工具就显得......
  • 用C++编写一个简单的程序
    本篇文章将介绍如何使用C++编写一个简单的程序,该程序可以接收用户输入并将其转换为整数。在C++中,可以使用标准库中的<iostream>头文件来输出和输入数据。以下是一个简单的C++程序,可以读取用户输入,并将其转换为整数:#include<iostream>usingnamespacestd;intmain(){......
  • Python 输出简单彩色字符【ANSI 转义序列笔记】
    """ASCII码的0-31和127被称为C0控制字符例如\07就是BEL,响铃(\0表示八进制)其中\033(十进制27,十六进制x1B)是ESC,转义字符,它可以用于转义序列如\033[表示序列导入(ControlSequenceIntroducer),简写为CSI也可写作\x1b[两个字......
  • FactoryIO十字机械手组装工作站仿真实验程序 【程序原创】使用简单的梯形
    FactoryIO十字机械手组装工作站仿真实验程序【程序原创】使用简单的梯形图编写,逻辑清晰,通俗易懂,写有详细注释,起到抛砖引玉的作用,比较适合有动手能力的入门初学者。加工中心的机器人不是真正的机器人,是仿真软件的一个部件,通过简单的IO控制,机器人执行固定的动作。软件环境:1、西门子......
  • 中文拼写检查任务方法初步简单总结
    title:中文拼写检查任务方法初步简单总结author:donglukuanabbrlink:498304885date:2023-04-0618:07:05tags:中文拼写检查任务方法初步简单总结(V1)一、任务简述中文拼写检查主要关注与对字或词级别的错误的纠正(并不涉及语法上的错误),任务的初步目标是寻找到出现错误......
  • 搭建直播平台,自定义VIew实现设置防截屏、添加水印
    搭建直播平台,自定义VIew实现设置防截屏、添加水印1.activity代码:MarkViewActivity packagecom.zdmtech.backgroundtextdemo;importandroid.os.Bundle;importandroid.view.WindowManager;importandroid.widget.RelativeLayout;importandroidx.annotation.Nullable;import......
  • 形态学运算与仿真:图像处理中形态学操作的简单解释
    形态学是图像处理领域的一个分支,主要用于描述和处理图像中的形状和结构。形态学可以用于提取图像中的特征、消除噪声、改变图像的形状等。其中形态学的核心操作是形态学运算。形态学运算是一种基于形状的图像处理技术,它是通过结构元素与图像进行特定运算的方式来改变图像的形态......
  • 基于Pytorch的简单深度学习项目实战
    基于Pytorch的简单深度学习项目实战_pytorch深度学习项目实战_NPC_0001的博客-CSDN博客基于以上补充:所需数据阿里网盘分享:(暂不支持分享,后续补上)代码:importtorch.utils.dataimporttorchvisionfromtorchimportnnfromtorch.utils.tensorboardimportSummaryWriterd......
  • 8.3 简单几何体的表面积和体积
    \(\mathbf{{\large{\color{Red}{欢迎到学科网下载资料学习}}}}\)【高分突破系列】高一数学下学期同步知识点剖析精品讲义!\(\mathbf{{\large{{\color{Red}{跟贵哥学数学,so\quadeasy!}}}}}\)必修第二册同步拔高,难度3颗星!模块导图知识剖析柱体1棱柱体积:\(V=sh......
  • 简单与复杂
    这个世界其实很简单,只是人心很复杂。其实人心也很简单,只是利益分配很复杂。 桌上有一堆苹果,人们并不在意这堆苹果有多少,而是在意分到自己手里的有多少。单位里有一摊子事儿,人们并不在意这摊子事儿有多少,而是在意自己多干了多少。 人与人之间的关系很简单,由......