Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перечисление шрифтов в Windows: использование `FindFirst`/`FindNext` и COM, а также недокументированная функция `GetFontResourceInfo`

Delphi , Графика и Игры , Шрифты

В статье будет рассмотрен вопрос перечисления шрифтов в операционной системе 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Шрифты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 14:50:33/0.0036020278930664/0