获取程序(EXE文件,dll文件)的主图标

来源:互联网 发布:软件项目合同范本 编辑:程序博客网 时间:2024/04/30 18:14

前段时间工作上遇到一个需求,提取一个exe的主图标并且存成文件。这个需求很常规,但一弄起来还是遇到了些问题。

1.exe主图标的标识(ID号)是哪个?

2.如何存成ico文件

 

现在我来说说问题1.

因为我平时给exe添加图标资源通常都有一个资源ID    IDR_ICON_GIRL(1001)什么的 ,算了 不描述了 直接说解决办法

其实exe啊 dll啊 凡是符合PE文件格式的 这个方式都适用.

 BOOL CALLBACK MyEnumProcedure( HANDLE  hModule, LPCTSTR  lpszType, LPTSTR  lpszName, LONG  lParam );
 int GetMainIconId( LPCTSTR lpszPath )
 {
  HINSTANCE hInstance = LoadLibrary( lpszPath );
  int iconIndex = 0;
  EnumResourceNames( hInstance, RT_GROUP_ICON, (ENUMRESNAMEPROC)MyEnumProcedure, (LPARAM)&iconIndex );
  return iconIndex;
 }
 HICON GetPeIconBySize( LPCTSTR lpszPath, int iconId, int nSize )
 {
  HINSTANCE hInstance = LoadLibrary( lpszPath );
  HICON hIocn = (HICON)::LoadImage( hInstance, MAKEINTRESOURCE(iconId), IMAGE_ICON, nSize, nSize, LR_DEFAULTCOLOR );
  FreeLibrary(hInstance);

  return hIocn;
 }
 BOOL CALLBACK MyEnumProcedure( HANDLE  hModule, LPCTSTR  lpszType, LPTSTR  lpszName, LONG  lParam )   
 {
  int index = 0;
  if( IS_INTRESOURCE(lpszName) )
  {
   index = (int)(lpszName );
  }
  else
  {
   CString sName = lpszName;
   sName.Replace(L'#', L'');
   index = _ttoi(sName.GetBuffer(0));
  }
  int *pVal = (int*)lParam;
  if( *pVal == 0 || index <= *pVal )
  {
   *pVal = index;
  }
  return TRUE;
 }

 

提个引子 具体的需求 具体暗盘吧

 

0 0
原创粉丝点击