在.Net(C#或VB:不关心)中,给定真实文件的文件路径字符串,FileInfo结构或FileSystemInfo结构,如何确定shell(资源管理器)使用的图标文件?
我目前没有计划将它用于任何事情,但是当我看到这个问题时,我对如何做到这一点感到好奇,我认为在SO上存档是有用的.
比方说,如果我想从一个库存的Windows可执行文件中提取一个图标.我可以通过在Visual Studio中打开它来获取该图标ID:
然后我会对48x48大小的图标感兴趣:
所以我的假设是:
HICON hIcons[4];
::ExtractIconEx(L"mstsc.exe", -13011, hIcons, NULL, 4);
hIconLogo = hIcons[3];
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,该方法只返回3个图标:
其中只有一个是我需要的32x32版本.
然后我找到了我称之为ExtractAssociatedIconEx的 API:
WORD wIcnId = -13011;
WORD wIcnInd = 3;
hIconLogo = ::ExtractAssociatedIconEx(hInst, L"mstsc.exe", &wIcnInd, &wIcnId);
Run Code Online (Sandbox Code Playgroud)
但这也给了我一些我没想到的其他图标.
那么这两个API有什么区别?我做错了什么?