インストールされているプリンターのアイコンを取得したいのですが。私が検索できたものから、アプローチの1つは、.dllまたは.exeのアイコンを取得し、それをプリンターのアイコンにすることです。ただし、GUIを介してインストールされているプリンタは次の場所で簡単に見つけることができます。
コントロールパネル\ハードウェアとサウンド\デバイスとプリンター
しかし、このリストのハードドライブに物理的な場所はありますか?これはその場で作成されますか?
プリンタのリストを含む物理ディスクフォルダはありません。
シェル名前空間にプリンターの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
}
}