N>Каким образом можно получить те самые "пополняемые" иконки для того или иного устройства?
После продолжительного гугления, появились следующие догадки. Я в приложении перебираю элементы папки, полученной с помощью SHGetSpecialFolderLocation с параметром CSIDL_PRINTERS. Но, как оказалось, начиная с Windows Vista эта функция оставлена лишь для обратной совместимости. Теперь я пробую зайти в папку "Устройства и принтеры" панели управления, но возникают проблемы при получении IShellItem — функция IOpenControlPanel.GetPath возвращает ошибку в выделенной строке
const
DEVICES_AND_PRINTERS = 'Microsoft.DevicesAndPrinters';
var
StrBuf: array[0..MAX_PATH - 1] of Char;
ControlPanel: IOpenControlPanel;
ShellItem: IShellItem2;
Walk: INamespaceWalk;
MyWalk: TMyNamespaceWalkCB;
HR: HRESULT;
begin
HR := CoCreateInstance(CLSID_OpenControlPanel, nil,
CLSCTX_INPROC_SERVER, IOpenControlPanel, ControlPanel);
CheckShellResult('CoCreateInstance(CLSID_OpenControlPanel)', HR);
try
HR := ControlPanel.GetPath(DEVICES_AND_PRINTERS, StrBuf, MAX_PATH);
CheckShellResult('ControlPanel.GetPath', HR);
HR := SHCreateItemFromParsingName(StrBuf, nil, IShellItem2, ShellItem);
CheckShellResult('SHCreateItemFromParsingName', HR);
...