![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| nicestep |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.11.2009 Где: Оренбург Репутация: нет Всего: нет |
В своем приложении я хочу получить реалистичные иконки принтеров, установленных в системе. Те самые, которые отображаются в папке "Устройства и принтеры" панели управления (Windows 7).
Для этого я пробовал перебрать элементы папки принтеров, полученной с помощью SHGetSpecialFolderLocation с параметром CSIDL_PRINTERS. Делее, используя интерфейс IExtractIcon, перебрал все возможные комбинации флагов для GetIconLocation. Но в результате, получил только иконки из стандартной коллекции. После продолжительного гугления, появились следующие догадки. Как оказалось, начиная с Windows Vista эта функция SHGetSpecialFolderLocation оставлена лишь для обратной совместимости, а каталога CSIDL_PRINTERS, как такового, вообще больше нет. Теперь, руководствуясь этим кодом, я пробую зайти конкретно в папку "Устройства и принтеры" панели управления и перебрать все элементы в ней. Но у меня возникают проблемы при получении IShellItem — функция IOpenControlPanel.GetPath возвращает ошибку в выделенной строке.
Подскажите, в чем может быть проблема? |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 8 Всего: 76 |
-------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| nicestep |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.11.2009 Где: Оренбург Репутация: нет Всего: нет |
||||
|
||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 29 Всего: 191 |
В винде есть недокументированная функция Printer_LoadIconsW (shell32.dll) - она как раз делает эту работу.
Там используется функция SHGetKnownFolderIDList с идентификатором FOLDERID_PrintersFolder вместе с функцией SHGetFileInfo (с флагами SHGFI_ICON + SHGFI_PIDL + [SHGFI_SMALLICON]). В общем, можно после вызова SHGetKnownFolderIDList сделать вызов SHBindToObject и привязать папку с принтерами к IShellFolder2, перебрать все принтеры и получить иконки. Сейчас нет возможности написать наглядный пример ;) |
|||
|
||||
| nicestep |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.11.2009 Где: Оренбург Репутация: нет Всего: нет |
Понял, сейчас попробую реализовать
Попробовал добавить себе CoInitialize, хотя, мне кажется, это лишнее
Возвращает многозначительное E_FAIL. Пенял также на недостаток прав доступа: попробовал, запустил от имени администратора - результат все тот же |
||||
|
|||||
| nicestep |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 10.11.2009 Где: Оренбург Репутация: нет Всего: нет |
Выяснил, что ошибка возникает только в 64-битных версиях Windows. В 32-битной все работает нормально Это сообщение отредактировал(а) nicestep - 11.7.2011, 08:59 |
||||
|
|||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |