Как узнать имя загруженного фонта.
От: space21  
Дата: 02.03.05 15:25
Оценка:
Есть файл фонта.
Я его успешно добавляю в систему с помощью AddFontResource.
Можно ли как-нибудь узнать имя добавленного фонта (я его заранее не знаю)?
Понятно, что если устанавливается фонт, которого в системе не было — то можно перебрать все имена установленных фонтов и проверить, какой добавился, а если фонт уже был установлен?


заранее спасибо.
Re: Как узнать имя загруженного фонта.
От: OLEGus1 Россия  
Дата: 14.11.05 15:03
Оценка:
Здравствуйте, space21, Вы писали:

S>Есть файл фонта.

S>Я его успешно добавляю в систему с помощью AddFontResource.
S>Можно ли как-нибудь узнать имя добавленного фонта (я его заранее не знаю)?
S>Понятно, что если устанавливается фонт, которого в системе не было — то можно перебрать все имена установленных фонтов и проверить, какой добавился, а если фонт уже был установлен?


S>заранее спасибо.

up. Аналогично
Crescite, nos qui vivimus, multiplicamini
Re[2]: Как узнать имя загруженного фонта.
От: space21  
Дата: 14.11.05 15:23
Оценка: +1
Здравствуйте, OLEGus1, Вы писали:

OLE>Здравствуйте, space21, Вы писали:


S>>Есть файл фонта.

S>>Я его успешно добавляю в систему с помощью AddFontResource.
S>>Можно ли как-нибудь узнать имя добавленного фонта (я его заранее не знаю)?
S>>Понятно, что если устанавливается фонт, которого в системе не было — то можно перебрать все имена установленных фонтов и проверить, какой добавился, а если фонт уже был установлен?


S>>заранее спасибо.

OLE>up. Аналогично

Я вроде бы нашел способ. Можно информацию о имени фонта вытащить из самого фонта, таблица 'name'. Ее внутренности подробно описаны в спецификации TrueType. Таким образом, мы заранее будем знать имя и сможем убедиться, что данный фонт был или еще не был установлен.
Re[3]: Как узнать имя загруженного фонта.
От: OLEGus1 Россия  
Дата: 14.11.05 15:40
Оценка:
Здравствуйте, space21, Вы писали:

S>Я вроде бы нашел способ. Можно информацию о имени фонта вытащить из самого фонта, таблица 'name'. Ее внутренности подробно описаны в спецификации TrueType. Таким образом, мы заранее будем знать имя и сможем убедиться, что данный фонт был или еще не был установлен.


Этот способ я тоже нашел Хотелось проще..... Ну да ладно.
Crescite, nos qui vivimus, multiplicamini
Re: Как узнать имя загруженного фонта.
От: OLEGus1 Россия  
Дата: 15.11.05 14:56
Оценка:
Здравствуйте, space21, Вы писали:

S>Есть файл фонта.

S>Я его успешно добавляю в систему с помощью AddFontResource.
S>Можно ли как-нибудь узнать имя добавленного фонта (я его заранее не знаю)?
S>Понятно, что если устанавливается фонт, которого в системе не было — то можно перебрать все имена установленных фонтов и проверить, какой добавился, а если фонт уже был установлен?


S>заранее спасибо.


Нашел недокументированную функцию в gdi32.dll и код для нее. Но работает только в НТ:

#include <windows.h>
typedef BOOL (WINAPI *PGFRI)(LPCWSTR, DWORD *, LPWSTR, DWORD);
// 1. parameter : seems to be the filename [IN]
// 2. parameter : size of the buffer [IN], size of the output [OUT]
// 3. parameter : a buffer [OUT]
// 4. parameter : an enumerated type
// return value is a simple BOOL : ok / not ok
// #define GetFontResourceInfo GetFontResourceInfoW
void main()
{
HINSTANCE hDLL = LoadLibrary("GDI32.DLL");
PGFRI GetFontResourceInfo = (PGFRI)GetProcAddress(hDLL, "GetFontResourceInfoW");
WCHAR fontName[] = L"Arial.ttf";
WCHAR wBuffer[1024]; DWORD dwBufSiz = sizeof(wBuffer);
// a couple values I tested
GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 0); // returns 1 (0x00000001) in wBuffer 
GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 1); // "Arial" in Unicode 
GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 2); // a (rather) large structure with some info 
GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 3); // nothing special 
GetFontResourceInfo(fontName, &dwBufSiz, wBuffer, 4); // the fullpath of the file
}
Crescite, nos qui vivimus, multiplicamini
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.