C++获取dll文件中的icon
值得注意的是
phiconLarge的尺寸为32x32
phiconSmall的尺寸为16x16
#include<iostream>
#include<Windows.h>
#include<OleCtl.h>
void main()
{
HICON *phiconLarge=new HICON, *phiconSmall=NULL;
int id=ExtractIconEx(TEXT("C:\\Windows\\System32\\imageres.dll"), -1,
NULL, NULL, 0);
printf("dll包含图标%d个\n", id);
id=ExtractIconEx(TEXT("C:\\Windows\\System32\\imageres.dll"), 2,
phiconLarge, NULL, 3);
printf("dll包含图标%d个\n", id);
PICTDESC picdesc;
picdesc.cbSizeofstruct = sizeof(PICTDESC);
picdesc.picType = PICTYPE_ICON;
picdesc.icon.hicon = *phiconLarge;
IPicture* pPicture = NULL;
OleCreatePictureIndirect(&picdesc, IID_IPicture, TRUE, (VOID**)&pPicture);
LPSTREAM pStream;
CreateStreamOnHGlobal(NULL, TRUE, &pStream);
LONG size;
HRESULT hr = pPicture->SaveAsFile(pStream, TRUE, &size);
LARGE_INTEGER li;
li.HighPart = 0;
li.LowPart = 0;
ULARGE_INTEGER ulnewpos;
pStream->Seek(li, STREAM_SEEK_SET, &ulnewpos);
FILE *fp = fopen("E:\\desktop\\pdfs\\1.ico", "wb");
ULONG uReadCount = 1;
char buf[1024];
while (uReadCount > 0)
{
pStream->Read(buf,1024, &uReadCount);
fwrite(buf, 1, uReadCount, fp);
}
fclose(fp);
pStream->Release();
}