我想检索已安装打印机的图标。从我可以搜索的方法来看,其中一种方法是检索.dll或.exe的图标,并将其作为打印机的图标。但是,通过GUI轻松找到安装的打印机:
控制面板\硬件和声音\设备和打印机
但是,这个列表中的硬盘驱动器上是否有物理位置?这是在飞行中创建的吗?
答案 0 :(得分:2)
没有包含打印机列表的物理磁盘文件夹。
如果您在shell命名空间中拥有打印机的PIDL,则可以使用SHGetFileInfo轻松获取其图标。获得PIDL有点困难但并非不可能。
我以前使用枚举虚拟打印机文件夹(CSIDL_PRINTERS)的功能完成了此操作,并将其中每个项目的名称与我要查找的打印机名称进行比较。当您找到匹配的名称时,您将拥有PIDL,然后您可以获得图标。
例如(这段代码当然不完整,你需要充实它):
SHGetFolderLocation(hwnd, CSIDL_PRINTERS, 0, 0, &pidlPrinters);
SHBindToObject(0, pidlPrinters, 0, IID_IShellFolder, &psfPrinters);
psfPrinters->EnumObjects(hwnd, SHCONTF_NONFOLDERS, &pEnum);
while (pEnum->Next(1, &pidl, 0) == S_OK)
{
psf->GetDisplayNameOf(pidl, SHGDN_NORMAL, &strName);
StrRetToBuf(&strName, pidl, chBuf, _countof(chBuf));
if (_wcsicmp(chBuf, pszPrinterToLookFor) == 0)
{
// printer matches
// build full pidl (pidlPrinters + pidl)
// pass to SHGetFileInfo with SHGFI_PIDL flag to get icon
}
}