Все вы наверное знаете, что во многих EXE- и DLL-файлах запрятано много иконок. Примером может являться ну хотябы shell32.dll в папке Windows\System, в котором запиханы иконки, применяющиеся для большинства стандартных расширений и системных значков типа папок, дисков и т. п. Также, главные EXE-шники всех уважающих себя программ содержат свои иконки, которые будут ассоциированы с нужными им типами файлов. Сделать подобное в своей программе просто - надо скомпилировать файл ресурсов (как - это уже другая тема) и подключить к своему проекту. В результате, exe-шник вашей программы будет содержать все иконки, которые вы запихали в файл ресурсов, плюс иконки, которые ассоциированы с формами проекта. Так вот, чтобы произвести обратный процесс, я обычно пользовался программкой
Icon Digger 2000 (есть еще масса подобных программ) и меня мало волновало,
как она работает. Пока самому не потребовалось получить доступ к иконкам,
зашитым в файле. И что же? "В дело" пойдут две API функции - ExtractIcon и DrawIcon вот их объявления:
Чтобы отобразить иконки, нам потребуется объект PictureBox. Именно Picture,
а не Image! Установите его свойство AutoRedraw как False (Ох и долго же
я намучался с этим. Наконец, методом научного тыка я вычислил, что если
это свойство стоит как True, после выполнения функции DrawIcon необходимо
выполнить метод PictureBox.Refresh)
Вроде бы все. Можете написать даже специальную функцию. Не забудьте про заморочки с AutoRedraw. Интересная вещь: чтобы узнать количество "зашитых" иконок в файле, выполните следующее
После этого, Num (As Long) будет содержать количество иконок в файле. И последнее. Наверняка вы захотите получить иконку, ассоциированную с неким файлом, например txt, doc или еще что. Так вот: вам не надо лазить за эти в реестр! Есть еще одна функция, подобная ExtractIcon - ExtractAssociatedIcon. Эта функция делает то же самое, только возвращает не иконку, содержащуюся в файле, а иконку, ассоциированную с файлом. (А вот тут я нашел багу в Win32 API Loader. На объявление функции ExtractAssociatedIcon бейсик при выполнении матюкается. Поэтому Declare функции не привожу, а советую воспользоваться библиотекой Win.tlb) Пример:
Ну вот вроде и все! Судьба IconDigger'а на VB в ваших руках! :))) Приятного программирования, Antiloop
|
>>> Реклама <<< |