首页 > Delphi > 在win7上获取256*256的图标
2011九月19

在win7上获取256*256的图标

ExtractIconEx和ExtractIcon只能提取32*32大小的图标,如何在win7下提取256*256大小的图标呢?

答案是:PrivateExtractIcons

但这个API在delphi中没有声明,可以静态声明:

{$IFDEF UNICODE}
function PrivateExtractIcons(lpszFile: PChar; nIconIndex, cxIcon, cyIcon: integer; phicon: PHANDLE; piconid: PDWORD; nicon, flags: DWORD): DWORD; stdcall ; external 'user32.dll' name 'PrivateExtractIconsW';
{$ELSE}
function PrivateExtractIcons(lpszFile: PChar; nIconIndex, cxIcon, cyIcon: integer; phicon: PHANDLE; piconid: PDWORD; nicon, flags: DWORD): DWORD; stdcall ; external 'user32.dll' name 'PrivateExtractIconsA';
{$ENDIF}

也可以动态加载:
/// <author>
/// Code by Siow http://vshui.com
///</author>
/// <summary>
/// 提取大于32*32的图标
/// </summary>
function ExtractIcons(exeFilename: string; icoSize: Integer; var hIcon: THandle; nIconIndex:
  Integer = 0): Boolean;
const
{$ifdef UNICODE}
 ExtractProcName='PrivateExtractIconsW';
{$else}
 ExtractProcName='PrivateExtractIconsA';
{$endif}
type
  TExtractFunc = function(lpszFile: PChar; nIconIndex, cxIcon, cyIcon: integer;
    phicon: PHANDLE; piconid: PDWORD; nicon, flags: DWORD): DWORD; stdcall;
var
  nIconId: DWORD;
  PrivateExtractIcons: TExtractFunc;
  hDll: THandle;
begin
  result := False;

  hDll := LoadLibrary('user32.dll');
  if (hDll < 4) then exit;
  try
    PrivateExtractIcons := GetProcAddress(hDll, ExtractProcName);

    if not Assigned(PrivateExtractIcons) then
      exit;

    if PrivateExtractIcons(PChar(exeFilename),
      nIconIndex, icoSize, icoSize, @hIcon, @nIconId, 1, LR_SHARED) <> 0
      then
      result := true;
  finally
    FreeLibrary(hDll);
  end;
end;
例子:
var
  s: string;
  hIco: THandle;
begin
  s := 'C:\Program Files\Internet Explorer\iexplore.exe';
  if ExtractIcons(s, 256, hIco, 0) then
  try
    DrawIconEx(Canvas.Handle, 0, 256, hIco, 256, 256, 0, 0, DI_NORMAL);
  finally
    DestroyIcon(hIco);
  end;
OK,256*256大小的ICON完美地画出来了。

存疑:
256*256 128*128 48*48 32*32 16*16几个尺寸的图标都能很好地画出来,
唯有64*64大小的图标画出来有很明显的锯齿,感觉一点都不平滑,不知道为什么,
请知道的童鞋不吝赐教,感谢万分。

anyShare分享到:
          

文章作者:微水网
本文地址:http://vshui.com/archives/247
版权所有 © 转载时必须以链接形式注明作者和原始出处!

本文目前尚无任何评论.

发表评论