该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
最郁闷的是图标文件的写入,在网上找到MFC的相关代码,修改成SDK后得到:
void SaveIcon(HICON hIconToSave, LPCTSTR sIconFileName)
{
HANDLE handle;
if(hIconToSave==NULL || sIconFileName==NULL)
return;
PICTDESC picdesc;
picdesc.cbSizeofstruct = sizeof(PICTDESC);
picdesc.picType = PICTYPE_ICON ;
picdesc.icon.hicon = hIconToSave;
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);
TCHAR pathbuf[1024];
wcscpy_s(pathbuf,sIconFileName);
if((handle=CreateFile (sIconFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)) == INVALID_HANDLE_VALUE )
{
MessageBoxA(NULL,"Error Opening File for Writing","",MB_OK);
return ;
}
LARGE_INTEGER li;
li.HighPart =0;
li.LowPart =0;
ULARGE_INTEGER ulnewpos;
pStream-> Seek( li,STREAM_SEEK_SET,&ulnewpos);
ULONG uReadCount = 1;
while(uReadCount> 0)
{
pStream-> Read(pathbuf,sizeof(pathbuf),&uReadCount);
if(uReadCount> 0) if(WriteFile(handle,pathbuf,sizeof(pathbuf),&uReadCount,NULL))
{
MessageBox(NULL,TEXT("图标提取并保存成功!"),TEXT("OK!!!【光影】"),0);
}
else
MessageBox(NULL,TEXT("写入信息失败,请确定该程序是否有图标或用户在选择的目录是否有写入的权限!"),TEXT("Error"),0);
}
pStream-> Release();
CloseHandle(handle);
}