Есть файл фонта.
Я его успешно добавляю в систему с помощью AddFontResource.
Можно ли как-нибудь узнать имя добавленного фонта (я его заранее не знаю)?
Понятно, что если устанавливается фонт, которого в системе не было — то можно перебрать все имена установленных фонтов и проверить, какой добавился, а если фонт уже был установлен?
Здравствуйте, space21, Вы писали:
S>Есть файл фонта. S>Я его успешно добавляю в систему с помощью AddFontResource. S>Можно ли как-нибудь узнать имя добавленного фонта (я его заранее не знаю)? S>Понятно, что если устанавливается фонт, которого в системе не было — то можно перебрать все имена установленных фонтов и проверить, какой добавился, а если фонт уже был установлен?
Здравствуйте, OLEGus1, Вы писали:
OLE>Здравствуйте, space21, Вы писали:
S>>Есть файл фонта. S>>Я его успешно добавляю в систему с помощью AddFontResource. S>>Можно ли как-нибудь узнать имя добавленного фонта (я его заранее не знаю)? S>>Понятно, что если устанавливается фонт, которого в системе не было — то можно перебрать все имена установленных фонтов и проверить, какой добавился, а если фонт уже был установлен?
S>>заранее спасибо. OLE>up. Аналогично
Я вроде бы нашел способ. Можно информацию о имени фонта вытащить из самого фонта, таблица 'name'. Ее внутренности подробно описаны в спецификации TrueType. Таким образом, мы заранее будем знать имя и сможем убедиться, что данный фонт был или еще не был установлен.
Здравствуйте, space21, Вы писали:
S>Я вроде бы нашел способ. Можно информацию о имени фонта вытащить из самого фонта, таблица 'name'. Ее внутренности подробно описаны в спецификации TrueType. Таким образом, мы заранее будем знать имя и сможем убедиться, что данный фонт был или еще не был установлен.
Этот способ я тоже нашел Хотелось проще..... Ну да ладно.
Здравствуйте, 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 GetFontResourceInfoWvoid 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
}