已安装打印机的文件夹位置是什么



我想检索已安装打印机的图标。从我可以搜索的内容来看,其中一种方法是检索.dll或.exe的图标,并将其作为打印机的图标。然而,很容易在以下位置找到通过GUI安装的打印机:

控制面板\硬件和声音\设备和打印机

但是,这个列表的硬盘上有物理位置吗?这是动态创建的吗?

没有包含打印机列表的物理磁盘文件夹。

如果在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
    }
}

最新更新