我需要在windows下正确的获取word文档“1.docx”的图标原始二进制资源数据,请告诉我详细C语言代码
时间: 2024-03-10 07:45:22 浏览: 107
获取Word文档的图标原始二进制资源数据,可以通过以下步骤完成:
1. 使用Win32 API函数LoadLibraryEx加载shell32.dll库。
2. 使用Win32 API函数LoadIconMetric从shell32.dll库中加载Word文档的图标。
3. 使用Win32 API函数GetIconInfo获取图标的信息。
4. 使用Win32 API函数GetDIBits获取图标的位图信息。
5. 使用Win32 API函数FreeLibrary释放shell32.dll库。
下面是详细的C语言代码:
```c
#include <Windows.h>
#include <Shellapi.h>
#include <Shlwapi.h>
#pragma comment(lib, "Shell32.lib")
#pragma comment(lib, "Shlwapi.lib")
int main() {
HMODULE hModule = LoadLibraryEx("shell32.dll", NULL, LOAD_LIBRARY_AS_DATAFILE);
if (hModule == NULL) {
return 0;
}
HICON hIcon;
HRESULT hr = LoadIconMetric(hModule, MAKEINTRESOURCE(2), LIM_LARGE, &hIcon);
if (FAILED(hr)) {
FreeLibrary(hModule);
return 0;
}
ICONINFO iconInfo;
if (!GetIconInfo(hIcon, &iconInfo)) {
DestroyIcon(hIcon);
FreeLibrary(hModule);
return 0;
}
BITMAP bmp;
if (!GetObject(iconInfo.hbmColor, sizeof(BITMAP), &bmp)) {
DeleteObject(iconInfo.hbmColor);
DeleteObject(iconInfo.hbmMask);
DestroyIcon(hIcon);
FreeLibrary(hModule);
return 0;
}
BITMAPINFOHEADER bmpInfoHeader;
bmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfoHeader.biWidth = bmp.bmWidth;
bmpInfoHeader.biHeight = bmp.bmHeight;
bmpInfoHeader.biPlanes = bmp.bmPlanes;
bmpInfoHeader.biBitCount = bmp.bmBitsPixel;
bmpInfoHeader.biCompression = BI_RGB;
bmpInfoHeader.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;
bmpInfoHeader.biXPelsPerMeter = 0;
bmpInfoHeader.biYPelsPerMeter = 0;
bmpInfoHeader.biClrUsed = 0;
bmpInfoHeader.biClrImportant = 0;
LPVOID lpBits = NULL;
HDC hdc = GetDC(NULL);
HBITMAP hBitmap = CreateDIBSection(hdc, (BITMAPINFO*)&bmpInfoHeader, DIB_RGB_COLORS, &lpBits, NULL, 0);
ReleaseDC(NULL, hdc);
if (hBitmap != NULL) {
HDC hMemDC = CreateCompatibleDC(NULL);
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
if (!GetDIBits(hMemDC, iconInfo.hbmColor, 0, bmp.bmHeight, lpBits, (BITMAPINFO*)&bmpInfoHeader, DIB_RGB_COLORS)) {
DeleteDC(hMemDC);
DeleteObject(hBitmap);
DeleteObject(iconInfo.hbmColor);
DeleteObject(iconInfo.hbmMask);
DestroyIcon(hIcon);
FreeLibrary(hModule);
return 0;
}
SelectObject(hMemDC, hOldBitmap);
DeleteDC(hMemDC);
DeleteObject(hBitmap);
}
DeleteObject(iconInfo.hbmColor);
DeleteObject(iconInfo.hbmMask);
DestroyIcon(hIcon);
FreeLibrary(hModule);
return 0;
}
```
在上面的代码中,我们使用了LoadLibraryEx、LoadIconMetric、GetIconInfo、GetDIBits、FreeLibrary等Win32 API函数来获取Word文档的图标原始二进制资源数据。请注意,这里的资源ID是2,如果要获取其他类型的文件图标,请查看相应的资源ID。
阅读全文