Как в dll добавить картинку

Обновлено: 06.07.2024

Если вы хотите изменить значок по умолчанию для определенной папки или ярлык, который вы создали, вы можете спросить, где можно найти новые значки. Хотя существует множество веб-сайтов, предлагающих пользовательские наборы значков, вы, тем не менее, можете предпочесть использовать значки, которые уже найдены на вашем компьютере или устройстве с Windows 10. В этой статье мы покажем вам, где значки хранятся в Windows 10. Если вы хотите найти все файлы значков Windows 10 по умолчанию, читайте дальше.

Как хранятся значки Windows 10?

Иконки обычно хранятся внутри файлов ICO. Однако файлы ICO имеют большой недостаток: они могут содержать только один значок. В Windows 10 множество приложений, папок, файлов и ярлыков, и многие из них имеют свои уникальные значки. Если бы у Windows был файл ICO для каждого используемого значка, это привело бы к значительному числу файлов значков.

Чтобы решить эту проблему, вместо использования файлов ICO для хранения значков, Windows использует файлы DLL. Основным преимуществом DLL- файла является тот факт, что он может содержать несколько значков внутри. На самом деле, вы можете сравнить DLL- файл значков с библиотекой значков. Если вы хотите изменить значок определенного файла, папки или ярлыка, вы можете просто установить его расположение значка, чтобы оно указывало на определенный файл DLL и конкретный значок из него.

Большинство значков из Windows 10 хранятся в файлах DLL. В следующем разделе мы покажем, где находятся эти библиотеки DLL со значками в Windows 10.

Где расположены значки Windows 10 по умолчанию?

Мы попытались упорядочить наш список значков Windows 10 по умолчанию как по расположению их файлов DLL, так и с учетом основного назначения значков, найденных внутри файлов DLL. Далее вы можете увидеть наш список мест из Windows 10, где вы найдете файлы .DLL, содержащие значки:

1. %systemroot%\system32\imageres.dll

Файл imageres.dll содержит много значков, используемых практически везде в Windows 10. Он содержит значки для различных типов папок, аппаратных устройств, периферийных устройств, действий и так далее.

2. %systemroot%\system32\shell32.dll

Файл shell32.dll также содержит множество значков, используемых в различных частях Windows 10. Вместе с imageres.dll , shell32.dll содержит одну из самых больших коллекций значков. Внутри вы можете найти значки для Интернета, устройств, сетей, периферийных устройств, папок и так далее.

3. %systemroot%\system32\pifmgr.dll

Pifmgr.dll содержит некоторые значки в старом стиле, которые были найдены в более старых версиях Windows, таких как Windows 95 и Windows 98. В нем вы можете найти забавные значки, которые изображают такие вещи, как окно, труба, шар, шляпа волшебника, и другие. 🙂

4. %systemroot%\explorer.exe

5. %systemroot%\system32\accessibilitycpl.dll

Accessibilitycpl.dll имеет набор значков, которые используются в основном для специальных возможностей в Windows 10. Он имеет значки с людьми, курсорами мыши, увеличительным стеклом, мышью и клавиатурой и так далее.

6. %systemroot%\system32\ddores.dll

Ddores.dll содержит значки для аппаратных устройств и ресурсов, таких как динамики, наушники, экраны, компьютеры, пульты дистанционного управления и игровые планшеты, мыши и клавиатуры, камеры, принтеры и так далее.

7. %systemroot%\system32\moricons.dll

8. %systemroot%\system32\mmcndmgr.dll

9. %systemroot%\system32\mmres.dll

Mmres.dll имеет несколько значков с различными аудио ресурсами, такими как динамики, наушники, микрофоны и веб-камера.

10. %systemroot%\system32\netcenter.dll

Netcenter.dll имеет несколько значков для сетевых настроек и функций.

11. %systemroot%\system32\netshell.dll

Netshell.dll содержит значки для всех видов сетевых подключений и соответствующего оборудования или технологий.

Например, внутри него вы можете найти значки для Bluetooth, беспроводных маршрутизаторов и сетевых подключений.

12. %systemroot%\system32\networkexplorer.dll

13. %systemroot%\system32\pnidui.dll

Pnidui.dll имеет значки для настроек, связанных с сетью (состояние Ethernet или беспроводной сети, расположение в сети и т.д.). Большинство значков здесь прозрачного белого цвета, поэтому вы должны выбрать их, чтобы увидеть, как они выглядят.

14. %systemroot%\system32\sensorscpl.dll

Sensorscpl.dll имеет несколько значков для разных типов датчиков. Хотя большинство из них выглядят одинаково, их детали указывают на такие вещи, как температура, мощность, ветер и т.д.

15. %systemroot%\system32\setupapi.dll

Setupapi.dll имеет значки, используемые для мастеров установки различных аппаратных устройств. Он имеет экраны, периферийные устройства, аппаратные компоненты, разъемы и разъемы, игровые панели и другие.

16. %systemroot%\system32\wmploc.dll

Wmploc.dll содержит мультимедийные значки, используемые для мультимедийных устройств, музыкальные и видеофайлы, папки, CD и DVD диски и так далее.

17. %systemroot%\system32\wpdshext.dll

Wpdshext.dll имеет значки для некоторых портативных устройств, таких как камеры, телефоны или mp3-плееры, и несколько индикаторов батареи.

18. %systemroot%\system32\compstui.dll

Comstui.dll включает в себя различные классические иконки из более старых версий Windows.

На нем есть иконки с лампочками, почтой, принтерами, документами, телефонами, факсимильными аппаратами и так далее.

19. %systemroot%\system32\ieframe.dll

Ieframe.dll содержит значки, используемые Internet Explorer для его ярлыков, кнопок и меню.

20. %systemroot%\system32\dmdskres.dll

Dmdskres.dll содержит значки, используемые только для управления дисками.

21. %systemroot%\system32\dsuiext.dll

Dsuiext.dll включает в себя значки для сетевых служб. Он имеет значки с серверами, людьми, принтерами, офисными зданиями, службами аутентификации и так далее.

22. %systemroot%\system32\mstscax.dll

Mstscax.dll хранит только несколько значков, используемых для подключений к удаленному рабочему столу, с компьютерами, уведомлениями и сертификатами безопасности.

23. %systemroot%\system32\wiashext.dll

Wiashext.dll имеет несколько значков для различных устройств обработки изображений, таких как сканеры, камеры, фото и видеокамеры, и несколько похожих значков.

24. %systemroot%\system32\comres.dll

Comres.dll содержит несколько значков, которые изображают пользователя, папку, карандаш и некоторые действия.

25. %systemroot%\system32\mstsc.exe

Mstsc.exe содержит несколько других значков, связанных с сетью, но также включает в себя другие значки, такие как динамик, микрофон и логотип Windows 8.

26. actioncentercpl.dll, aclui.dll, autoplay.dll, comctl32.dll, xwizards.dll, ncpa.cpl, url.dll (все в %systemroot%\system32\)

Все эти файлы содержат значки; однако у многих есть только одна иконка внутри или только несколько, поэтому мы решили упомянуть их все вместе. У них есть значки, используемые в Центре действий Windows 10 , некоторые значки ошибок и информации, значки автозапуска, некоторые значки пользователей и значки веб-сайтов.

Как использовать значки, хранящиеся в файле .DLL

Значки, хранящиеся в файлах .DLL, не могут быть скопированы и сохранены в другом месте, по крайней мере, если вы не используете специальное приложение, которое может извлекать значки из файлов .DLL. Однако вы можете использовать любой значок, хранящийся в таком файле, чтобы установить его в качестве значка, используемого папкой, библиотекой или ярлыком. Просто скопируйте и вставьте путь, который мы указали для интересующей вас DLL, в поле «Искать значки в этом файле».

В ресурсы DLL добавляем рисунки chemical.bmp и factory.bmp.



В проектную группу добавить новый проект VCL Forms. Project - Add New Project. .



На форме нового окна создать две кнопки и один Image.


Для кнопок создать событийные процедуры OnClick.

Отметим, что аналогичным образом в файле ресурсов DLL можно создавать и набор пиктограмм. Использоваться они могут тоже аналогично, только вместо функции LoadBitmap надо использовать функцию Loadlcon.

Поиск изображений и пиктограмм в ресурсах

В API Windows имеется функция EnumResourceNames, позволяющая полуполучить список имен ресурсов указанного типа, содержащихся в ресурсе любого вывыполняемого модуля, в частности, DLL. Рассмотрим ее применение в приложениях VCL Win32. В модуле Windows эта функция объявлена следующим образом:

function EnumResourceNames(
hModule: HMODULE;
lpType: PWideChar;
lpEnumFunc: ENUMRESNAMEPROC;
lParam: Longint
): BOOL; stdcall;

Параметр hModule является дескриптором модуля, ресурсы которого исследуисследуются. Параметр lpType является строкой, указывающей тип исследуемых ресурресурсов. В частности, этот параметр может принимать значения следующих констант:

RT_BITMAP ресурсы BMP
RT_GROUP_ICON ресурсы аппаратнонезависимых пикторамм
RT_ICON ресурсы аппаратнозависимых пикторамм

Остальные возможные значения посмотрите в справке API Windows.

Параметр lpEnumFunc определяет адрес функции, которая реагирует на каждое найденное значение ресурса. Параметр lParam может определять какой-то дополнительный параметр, передаваемый в функцию lpEnumFunc.

Функция EnumResourceNames работает так. Если в файле ресурсов выполняемого модуля имеются ресурсы типа, указанного параметром lpType, то для каждого такого ресурса вызывается функция, адрес которой указан параметром lpEnumFunc. Эта функция должна иметь заголовок вида:

function MyEnumResNameProc(
hModule: THandle;
lpType, pszName:PChar;
lParam: longint
): BOOL; stdcall;

В функцию автоматически передаются параметры hModule, lpType, lParam, указанные аргументами при вызове EnumResourceNames. Кроме того, передается параметр pszName — строка с именем ресурса. Функция MyEnumResNameProc может как-то обработать полученную информацию. Если требуется продолжать исследование ресурсов данного типа, то функция MyEnumResNameProc должна вернуть true. Если функция вернет false, цикл вызовов этой функции, инициированный функцией EnumResourceNames, прервется.

Рассмотрим пример, вид формы которого приведен на рисунке ниже. Приложение сосодержит одну кнопку, вызывающую стандартный диалог открытия файла. Если пользователь выбрал в диалоге выполняемый файл, то в выпадающие списки ComboBox1 и ComboBox2 загружаются соответственно имена ресурсов BMP и пиктограмм, содержащихся в файле. Если такие ресурсы нашлись, пользователь может посмотреть их, выбирая имя ресурса в выпадающем списке.


Ниже приведен код этого приложения:

Функция MyEnumResNameProc — это та самая функция, к которой в цикле следуют обращения для каждого элемента ресурсов. В этой функции анализируется тип ресурса lpType и имена ресурсов BMP заносятся в список ComboBox1, а имена пиктограмм — в список ComboBox2. Функция всегда возвращает true, так что происходит просмотр всех ресурсов.

Процедура Button1Click является обработчиком щелчка на кнопке. Процедура вызывает диалог открытия файла и загружает функцией LoadLibrary выбранный пользователем модуль. Далее удаляется изображение из Image1, очищаются выпадающие списки ComboBox и производится вызов EnumResourceNames для различных типов ресурсов. В заключение загруженный модуль выгружается из памяти функцией FreeLibrary.

Обработчики щелков на выпадающих списках ComboBox сводятся к тому, что функциями LoadBitmap или Loadlcon выбранный пользователем ресурс загружается в Image1.

Используемая литература:
Иван Хладни. Внутренний мир Borland Delphi 2006.
А.Я. Архангельский. Приемы программирования Delphi на основе VCL. Версия Delphi 5 - Delphi 2006.

Для компиляции ресурсов, используемых в приложении, таких как курсоры, изображения, иконки в динамически связанную библиотеку DLL , применяется следующая технология:

  1. составляется список ресурсов в текстовом файле с расширением *.RC,
  2. этот файл, с помощью утилиты brcc32.exe , компилируется в файл ресурса, с расширением *. RES,
  3. затем этот файл в среде Delphi компилируется в библиотеку DLL

Разберем детально этот механизм.

Сначала в обычном текстовом редакторе, например в Блокноте , создадим текстовый файл с расширением *.RC , представляющего собой файл описания ресурсов. Файл содержит следующие строки вида:

где строка описания ресурса содержит: имя ресурса - image1, тип ресурса - RCDATA, с расположением ресурса picture.jpg в этом же каталоге, т.к. путь к ресурсу не указывается.

Тип ресурса RCDATA используется для пользовательских ресурсов, для курсоров указывается тип CURSOR, для иконок - ICON, для изображений формата BMP - BITMAP.

В Delphi поддерживаются следующие типы ресурсов

RT_ACCELERATOR - таблица ускорителей

RT_ANICURSOR - анимированный курсор

RT_ANIICON - анимированная икона

RT_DIALOG - диалоговое окно

RT_FONT - шрифт

RT_FONTDIR - набор шрифтов

RT_GROUP_CURSOR - коллекция курсоров

RT_GROUP_ICON - коллекция иконок

RT_HTML - HTML документ

RT_MENU - меню

RT_STRING - таблица строк

RT_VERSION - ресурс версия

Т.е. если вы хотите включить в библиотеку шрифт, то в файле RC указывается тип FONT.

Ресурсы, включенные в файл описания ресурсов *. RC , затем нужно скомпилировать в файл ресурсов с расширением RES при помощи родного компилятора ресурсов Delphi - brcc32.exe ( Borland Resource CommandLine Compiler 32 bit ) , который находится в каталоге Borland\DelphiX\Bin , где X - версия Delphi . Утилита работает в режиме командной строки. Компиляция файла example.RC будет выглядеть следующим образом:

После компиляции в каталоге с:\Проекты\ появится файл example.RES .

Затем в среде Delphi создаем библиотеку DLL , куда включаем наш файл ресурсов example.RES .

Для создания библиотеки DLL в среде Delphi меню File выбираем пункт New и пункт подменю Other..

В появившемся окне выбираем тип проекта DLL Wizard , что представляет собой нужную нам библиотеку DLL создав проект, указываем компилятору включать наш ресурс в директиве . В листинге №1 приводится код проекта Project1.

Затем проект компилируем в файл DLL , выбрав в меню Project пункт Build.

Получаем файл DLL с одноименным названием проекта Project1 . Загрузка нашей картинки JPG из библиотеки DLL осуществляется следующим образом. Сначала загружаем DLL в память (1) , создаем поток для конкретного ресурса (2) , извлекаемого из библиотеки, создаем объект изображения (3) , производим загрузку ресурса в поток (4) , освобождаем дескрипторы потока и библиотеки (5) .

Учитывая особенности извлекаемых из DLL ресурсов, создается тот или иной объект, т.е. для растрового изображения типа BMP создается объект TBitmap и т.д.

Я начал реализовывать пример кода MEF из этого учебника , который описывает создание пользовательского атрибута ExportAttribute для метаданных. Все шло гладко, пока я не попытался включить изображение из файла ресурсов в метаданные. Цель состоит в том, чтобы извлечь заголовок, описание и значок для каждого плагина DLL в качестве метаданных для построения меню плагинов в основной программе.

Теперь я получаю ошибку компиляции:

"Аргумент атрибута должен быть постоянным выражением, typeof expression или выражение создания массива типа атрибута параметра"

Так что теперь у меня есть проблема, и мне нужно выяснить, либо:

1) Как включить изображение в атрибут ?

2) Как включить метаданные в MEF без использования атрибутов ?

Вот код, который я использую:

В классе контрактов:

Пользовательский атрибут в плагине DLL:

И, наконец, класс программы в плагине DLL:

Эта линия производит ошибку.

Очевидно, что ResourceFile не считается константой, но тогда как я могу использовать изображение в качестве метаданных, или это невозможно ? (Обратите внимание, что изображение установлено как " встроенное в .resx" )

Спасибо за любую помощь или предложения !

1 ответ

Прямо сейчас я пытаюсь разделить набор постоянно меняющихся классов на их собственные dll и динамически загружать их с помощью MEF. Моя проблема заключается в том, что всякий раз, когда я пытаюсь перезаписать dll во время работы приложения, оно говорит, что оно используется. Есть ли в любом случае.

Я до сих пор не совсем понимаю, почему вы можете возвращать строки из файла ресурсов в виде метаданных MEF, но не встроенных значков или изображений.

Поскольку я уже несколько дней пытаюсь собрать воедино функционирующую примерную программу, которая предоставляет меню подключаемого модуля со значками, я решил, что опубликую код на случай, если он поможет кому-то еще.

Это полностью функциональный пример проекта со следующими функциями:

Задумано как единое решение с 5 проектами ( MainProgram, ContractInterfaces, PlugInA, PlugInB, PlugInC )

События Post Build автоматически копируют DLLs из каждого проекта в общую папку "Plug-Ins"

Проект MainProgram (WinForm) создаст каталог доступных подключаемых модулей DLL и заполнит ListView значками и заголовком метаданных каждого подключаемого модуля

Дважды щелкнув элемент ListView, вы создадите экземпляр плагина ( используя ленивое создание экземпляра) и запустите его.

Каждый плагин получит ссылку на основную форму при запуске, создаст новую TextBox и отправит ее в основную форму, чтобы доказать, что она запущена и может получить доступ к GUI.

Значения метаданных заголовка, описания и версии выбранного плагина будут выведены в окно консоли

Я назначил каждому DLL другой значок ( из старой папки Visual Studio 6 Common Graphics Misc )

Screenshot

Значки были извлечены из плагинов DLL для создания ListView, а TextBoxes были созданы и отправлены DLLs в GUI после их запуска ( после двойного щелчка по каждому элементу плагина в ListView ).

По какой-то причине синтаксическому анализатору примеров кода не нравятся операторы Using, поэтому здесь они представлены в виде маркеров:

Теперь добавьте элемент управления ListView с именем "listView1" в основную форму и сохраните его в правой части формы. Динамически созданный TextBoxes из плагинов будет отображаться слева.

Затем добавьте проект класса с именем "ContractInterfaces", а затем включите этот код:

  • использование System.Windows.Forms;
  • (пространство имен) ContractInterfaces

Затем добавьте проект класса с именем "PlugInA", а затем включите этот код:

Затем добавьте проект класса с именем "PlugInB", а затем включите этот код:

Затем добавьте проект класса с именем "PlugInC", а затем включите этот код:

Решение должно выглядеть следующим образом:

Solution

Щелкните правой кнопкой мыши на решении и выберите "Project Dependencies. ". Установите зависимости следующим образом:

  • MainProgram - зависит от - ContractInterface
  • PlugInA - зависит от - ContractInterface
  • PlugInB - зависит от - ContractInterface
  • PlugInC - зависит от - ContractInterface
  • ContractInterface - зависит от - [ничего]

Щелкните правой кнопкой мыши на решении и выберите "Project Build Order. ". Порядок сборки должен быть следующим:

  1. ContractInterface
  2. PlugInA
  3. PlugInB
  4. PlugInC
  5. MainProgram

Создайте и запустите программу. Вы должны увидеть 3 файла DLL, скопированные в новую папку "Plug-Ins" на том же уровне каталога, что и файл решения (*.sln). Если нет, проверьте Порядок сборки проекта, Зависимости и то, что вы ввели события после сборки в соответствии с примечаниями в коде плагина выше. Если файлы есть, то ListView должен быть заполнен в Форме с помощью записей плагина. Дважды щелкните каждую запись ListView,чтобы запустить плагин.

Получайте удовольствие, я надеюсь, что это кому-то поможет.

Я разрабатываю расширяемое приложение с MEF. Приложение будет иметь множество типов плагинов для сбора и обработки данных различными способами. Я думаю о создании версионного онлайн-репозитория для плагинов, который позволит пользователю загружать новые версии плагинов, когда они станут доступны.

Позволяет ли MEF размещать несколько плагинов в одном DLL, так что мне не нужно создавать новую библиотеку классов для каждого нового плагина ? Спасибо.

Похожие вопросы:

Я хотел бы получить обратно файл jpg из файла dll, который я загружаю с помощью MEF. Как я могу добиться успеха? Спасибо

В моем последнем приложении использование MEF для загрузки плагинов шло просто отлично, но теперь я столкнулся с новой проблемой. У меня есть решение для этого, которое я объясню в конце этого.

Прямо сейчас я пытаюсь разделить набор постоянно меняющихся классов на их собственные dll и динамически загружать их с помощью MEF. Моя проблема заключается в том, что всякий раз, когда я пытаюсь.

Я разрабатываю расширяемое приложение с MEF. Приложение будет иметь множество типов плагинов для сбора и обработки данных различными способами. Я думаю о создании версионного онлайн-репозитория для.

Позволяет ли MEF размещать несколько плагинов в одном DLL, так что мне не нужно создавать новую библиотеку классов для каждого нового плагина ? Спасибо.

Как включить в моем приложении ClickOnce (WPF) такие библиотеки DLL плагинов, которые могут быть удалены во время выполнения? Я нашел старую демо-версию, которая делает это с помощью этого. private.

Я разрабатываю приложение с MEF для управления каким-то плагином. Внутри этого плагина они представляют собой какую-то нить. Когда плагин возвращает my DataTable в основную программу, плагин.

Читайте также: