用C语言写一个截图的exe文件
时间: 2023-07-04 09:12:03 浏览: 154
好的,以下是一个简单的用C语言实现的Windows截图可执行文件的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main() {
// 获取屏幕的宽度和高度
int width = GetSystemMetrics(SM_CXSCREEN);
int height = GetSystemMetrics(SM_CYSCREEN);
// 创建一个设备上下文
HDC hScreenDC = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
HDC hMemoryDC = CreateCompatibleDC(hScreenDC);
// 创建一个位图对象并将其选入内存设备上下文中
HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
HBITMAP hOldBitmap = SelectObject(hMemoryDC, hBitmap);
// 将屏幕内容绘制到位图对象中
BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);
// 将位图对象保存到文件中
HANDLE hFile = CreateFile(TEXT("screenshot.bmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
BITMAPFILEHEADER bmfHeader = { 0 };
BITMAPINFOHEADER bi = { 0 };
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = width;
bi.biHeight = height;
bi.biPlanes = 1;
bi.biBitCount = 24;
bi.biCompression = BI_RGB;
DWORD dwBytesWritten = 0;
WriteFile(hFile, &bmfHeader, sizeof(BITMAPFILEHEADER), &dwBytesWritten, NULL);
WriteFile(hFile, &bi, sizeof(BITMAPINFOHEADER), &dwBytesWritten, NULL);
DWORD dwSize = ((((width * 24) + 31) & ~31) >> 3) * height;
BYTE* pData = (BYTE*)malloc(dwSize);
GetDIBits(hMemoryDC, hBitmap, 0, height, pData, (BITMAPINFO*)&bi, DIB_RGB_COLORS);
WriteFile(hFile, pData, dwSize, &dwBytesWritten, NULL);
CloseHandle(hFile);
// 清理资源并退出程序
free(pData);
SelectObject(hMemoryDC, hOldBitmap);
DeleteDC(hMemoryDC);
DeleteDC(hScreenDC);
return 0;
}
```
这个程序会将当前屏幕截图保存到名为"screenshot.bmp"的文件中。需要注意的是,这个程序只是一个简单的示例,并没有进行错误处理、内存管理等方面的优化,实际使用时需要根据具体情况进行改进。