Проблема такая: получаю список установленых приложений и HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall. Через DisplayIcon или ModifyPath вытаскиваю часть иконок. Но часть приложений не хранит в реестре эти параметры. Сам исполняемый файл не всегда имеет имя, совпадающее с названием приложения. Где еще стоит поискать(и что бы не зависеть от языка системы)? Может кто-нибудь знает, как стандартная "установка/удаление" получает иконки приложений?
Благодарю за внимание!
"BaD.P1nG" <76159@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:3027519@news.rsdn.ru...
> Проблема такая: получаю список установленых приложений и HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall. Через DisplayIcon или ModifyPath вытаскиваю часть иконок. Но часть приложений не хранит в реестре эти параметры. Сам исполняемый файл не всегда имеет имя, совпадающее с названием приложения. Где еще стоит поискать(и что бы не зависеть от языка системы)? Может кто-нибудь знает, как стандартная "установка/удаление" получает иконки приложений?
> Благодарю за внимание!
EnumResourceTypes + EnumResourceXXX + LoadImage + ExtractIcon
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, BaD.P1nG, Вы писали:
BP>Проблема такая: получаю список установленых приложений и HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall. Через DisplayIcon или ModifyPath вытаскиваю часть иконок. Но часть приложений не хранит в реестре эти параметры. Сам исполняемый файл не всегда имеет имя, совпадающее с названием приложения. Где еще стоит поискать(и что бы не зависеть от языка системы)? Может кто-нибудь знает, как стандартная "установка/удаление" получает иконки приложений?
BP>Благодарю за внимание!
Надо дополнительно читать ветку
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache\{SomeProgram}\SlowCacheInfo
т.е.
если есть ветка HKLM\...\Uninstall\MyTool_is1\, то читаем структуру HKLM\...\ARPCache\MyTool_is1\SlowCacheInfo
Формат структуры:
struct SlowInfoCache
{
DWORD Size; // = sizeof(SlowInfoCache) = 552
DWORD HasName;
LONGLONG InstallSize;
FILETIME LastUsed;
DWORD Frequency;
WCHAR Name[ MAX_PATH + 1 ]; // Путь к exe файлу, у него и получаешь иконку
}
Только все равно останеться часть приложений без иконки
Тут надо запускать RegMon и FileMon, смотреть что и откуда читает "установка/удаление"
Если узнаешь, чтото новенькое, то отпишись
Здравствуйте, in trance, Вы писали:
IT>Надо дополнительно читать ветку
IT>HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache\{SomeProgram}\SlowCacheInfo
IT>т.е.
IT>если есть ветка HKLM\...\Uninstall\MyTool_is1\, то читаем структуру HKLM\...\ARPCache\MyTool_is1\SlowCacheInfo
IT>Формат структуры:
IT>IT>struct SlowInfoCache
IT>{
IT> DWORD Size; // = sizeof(SlowInfoCache) = 552
IT> DWORD HasName;
IT> LONGLONG InstallSize;
IT> FILETIME LastUsed;
IT> DWORD Frequency;
IT> WCHAR Name[ MAX_PATH + 1 ]; // Путь к exe файлу, у него и получаешь иконку
IT>}
IT>
IT>Только все равно останеться часть приложений без иконки
IT>Тут надо запускать RegMon и FileMon, смотреть что и откуда читает "установка/удаление"
IT>Если узнаешь, чтото новенькое, то отпишись
Самое смешное, что сканил этими тулзами. У той же Оперы в реестре вообще нет пути к файлу, только к унинсталлеру, но и тот лежит на другом уровне иерархии директорий... А читать...уже весь реестр, почитай читаю, да вот толку чуть =) Что найду- отпишусь...
Думаю, что Ваш, in trance, вариант, окажется очень кстати... Недодумался еще эту ветку сканить