你应该用ExtractIconEx  
Platform SDK: Windows User Interface 
ExtractIconEx
The ExtractIconEx function creates an array of handles to large or small icons extracted from the specified executable file, dynamic-link library (DLL), or icon file. UINT ExtractIconEx(
  LPCTSTR lpszFile,        // file name
  int nIconIndex,          // icon index
  HICON *phiconLarge,      // large icon array
  HICON *phiconSmall,      // small icon array
  UINT nIcons              // number of icons to extract
);
Parameters
lpszFile 
[in] Pointer to a null-terminated string specifying the name of an executable file, DLL, or icon file from which icons will be extracted. 
nIconIndex 
[in] Specifies the zero-based index of the first icon to extract. For example, if this value is zero, the function extracts the first icon in the specified file. 
If this value is –1 and phIconLarge and phiconSmall are both NULL, the function returns the total number of icons in the specified file. If the file is an executable file or DLL, the return value is the number of RT_GROUP_ICON resources. If the file is an .ico file, the return value is 1. Windows 95/98, Windows NT 4.0, and Windows 2000: If this value is a negative number and either phIconLarge or phiconSmall is not NULL, the function begins by extracting the icon whose resource identifier is equal to the absolute value of nIconIndex. For example, use -3 to extract the icon whose resource identifier is 3. phiconLarge 
[out] Pointer to an array of icon handles that receives handles to the large icons extracted from the file. If this parameter is NULL, no large icons are extracted from the file. 
phiconSmall 
[out] Pointer to an array of icon handles that receives handles to the small icons extracted from the file. If this parameter is NULL, no small icons are extracted from the file. 
nIcons 
[in] Specifies the number of icons to extract from the file. 
Return Values
If the nIconIndex parameter is -1, the phiconLarge parameter is NULL, and the phiconSmall parameter is NULL, then the return value is the number of icons contained in the specified file. Otherwise, the return value is the number of icons successfully extracted from the file. Res
You must destroy all icons extracted by ExtractIconEx by calling the DestroyIcon function. To retrieve the dimensions of the large and small icons, use the GetSystemMetrics function with the SM_CXICON, SM_CYICON, SM_CXSMICON, and SM_CYSMICON flags. Requirements 
  Windows NT/2000: Requires Windows NT 4.0 or later.
  Windows 95/98: Requires Windows 95 or later.
  Header: Declared in Shellapi.h.
  Library: Use Shell32.lib.
  Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000.See Also
Icons Overview, Icon Functions, DestroyIcon, ExtractIconBuilt on Thursday, May 11, 2000Requirements 
  Windows NT/2000: Requires Windows NT 4.0 or later.
  Windows 95/98: Requires Windows 95 or later.
  Header: Declared in Shellapi.h.
  Library: Use Shell32.lib.
  Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000.
See Also
Icons Overview, Icon Functions, DestroyIcon, ExtractIcon