Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SHGetImageList返回Windows 7上损坏的文件夹图标_Windows_Explorer - Fatal编程技术网

SHGetImageList返回Windows 7上损坏的文件夹图标

SHGetImageList返回Windows 7上损坏的文件夹图标,windows,explorer,Windows,Explorer,Windows 7上文件夹的默认图标有问题 我习惯于用下一个代码获取图标 DWORD flags = directory ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL; ... HICON largeIcon = NULL; SHGetFileInfo(filename.c_str(), flags, &shfi, sizeof(SHFILEINFO), SH

Windows 7上文件夹的默认图标有问题

我习惯于用下一个代码获取图标

    DWORD flags = directory ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL;
    ...
        HICON largeIcon = NULL;

        SHGetFileInfo(filename.c_str(), flags, &shfi, sizeof(SHFILEINFO),
            SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX);

        IImageList* imageList = NULL;
        HRESULT hResult = SHGetImageList(SHIL_JUMBO, IID_IImageList, (void**)&imageList);
        if (!imageList || hResult != S_OK)
            return NULL;

        hResult = imageList->GetIcon(shfi.iIcon, ILD_TRANSPARENT, &largeIcon);
        if (hResult != S_OK)
            return NULL;

        icon = LoadBitmapFromHicon(largeIcon);
        DestroyIcon(shfi.hIcon);
        DestroyIcon(largeIcon);
但它会返回文件夹的损坏图标。另外一个也可以。 我在上面用了灰色滤镜。原来的那个看起来一样


另外,我在W8上看起来很好。

也有同样的问题。但我使用变通方法:

function ExtractFolderIcon: HICON;
var
  Info: TSHStockIconInfo;
  Lib: HMODULE;
begin
  Info.cbSize := SizeOf(Info);
  OleCheck(SHGetStockIconInfo(SIID_FOLDER, SHGSI_ICONLOCATION, Info));
  Lib := LoadLibrary(Info.szPath);
  if Lib = 0 then RaiseLastOSError;
  try
    Result := LoadImage(Lib, MAKEINTRESOURCE(-Info.iIcon), IMAGE_ICON, 256, 256, LR_DEFAULTCOLOR);
  finally
    FreeLibrary(Lib);
  end;
end;
左边的图像是通过“经典”方式接收的,右边是解决方法:

function ExtractFolderIcon: HICON;
var
  Info: TSHStockIconInfo;
  Lib: HMODULE;
begin
  Info.cbSize := SizeOf(Info);
  OleCheck(SHGetStockIconInfo(SIID_FOLDER, SHGSI_ICONLOCATION, Info));
  Lib := LoadLibrary(Info.szPath);
  if Lib = 0 then RaiseLastOSError;
  try
    Result := LoadImage(Lib, MAKEINTRESOURCE(-Info.iIcon), IMAGE_ICON, 256, 256, LR_DEFAULTCOLOR);
  finally
    FreeLibrary(Lib);
  end;
end;

在我被问到之前,我得到了相同的解决方案。所以我想说我们有一个赢家。