Re: Иконки устройств (принтеров) в Windows 7
От: nicestep Россия  
Дата: 08.07.11 10:53
Оценка:
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);
    ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.