В статье будет рассмотрен вопрос перечисления шрифтов в операционной системе Windows. В частности, будут рассмотрены два подхода: использование функций FindFirst/FindNext для перечисления файлов в директории C:\Windows\Fonts\ и использование компонентов COM для той же цели. Также будет упомянута недокументированная функция GetFontResourceInfo, которая позволяет получить имя шрифта из файла шрифта.
Использование FindFirst/FindNext для перечисления файлов шрифтов
Для перечисления файлов шрифтов в директории C:\Windows\Fonts\ можно использовать функции FindFirst и FindNext. Пример кода на Object Pascal (Delphi) для этого:
Path := 'C:\Windows\Fonts';
if FindFirst(Path + '\*', faNormal, FileRec) = 0 then
repeat
// Здесь код для обработки каждого файла
until FindNext(FileRec) <> 0;
FindClose(FileRec);
Этот код позволит перечислить все файлы в директории, но для получения имени шрифта из имени файла (например, tahoma.ttf должно отображаться как Tahoma regular) потребуется дополнительная обработка.
Использование COM для перечисления шрифтов
Вместо использования FindFirst/FindNext можно использовать компоненты COM для перечисления шрифтов. Пример кода на Object Pascal для этого:
var
psfDeskTop: IShellFolder;
psfFont: IShellFolder;
pidFont: PITEMIDLIST;
pidChild: PITEMIDLIST;
pidAbsolute: PItemIdList;
FileInfo: SHFILEINFOW;
pEnumList: IEnumIDList;
celtFetched: ULONG;
begin
// Здесь код для получения папки шрифтов и перечисления файлов
end;
Этот подход может быть более сложным, но он также позволяет получить информацию о шрифтах, включая их отображаемые имена.
Недокументированная функция GetFontResourceInfo
Существует недокументированная функция GetFontResourceInfo, которая позволяет получить имя шрифта из файла шрифта. Пример использования этой функции на Object Pascal:
function GetFontResourceInfo(lpszFilename: PChar; var cbBuffer: DWORD; lpBuffer: PChar; dwQueryType: DWORD): DWORD; stdcall; external 'gdi32.dll' name 'GetFontResourceInfoW';
...
procedure ListFonts;
begin
// Здесь код для перечисления файлов шрифтов и получения их имен
end;
Использование недокументированных функций в производственном коде не рекомендуется, так как это может привести к нестабильной работе программы в будущем.
Заключение
В статье были рассмотрены различные подходы к перечислению шрифтов в Windows. Каждый из них имеет свои преимущества и недостатки, и выбор метода зависит от конкретных требований и ограничений проекта. Важно помнить о потенциальных рисках, связанных с использованием недокументированных функций.
В статье рассматриваются различные методы для перечисления шрифтов в операционной системе Windows, включая использование функций Windows API и компонентов COM, а также упоминается недокументированная функция для получения информации о шрифтах.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.