Интересное задание!
Для этого нет действительной команды сценария, а список установленных имен шрифтов заполняется ОС.
Однако, используя Powershell и команду сценария LaunchExternal()
, можно построить workaround.
После нескольких проб и ошибок, я думаю, что я получил это работает по следующему сценарию:
void WriteFontListToDisk(string fileName)
{
String PSscript
PSscript += "[System.Reflection.Assembly]::LoadWithPartialName('System.Drawing');"
PSscript += "(New-Object System.Drawing.Text.InstalledFontCollection).Families "
PSscript += " | out-file -encoding ASCII " + fileName // Need to specify ASCII here!
String callString
callString += "powershell"
//callString += " -NoExit" // Keep Powershell open
callString += " -Command &{ "
callString += PSscript
callString += " }"
LaunchExternalProcess(callString, 5)
}
TagGroup ReadFontListFromFile(string fileName)
{
TagGroup tg = NewTagList()
if (!DoesFileExist(fileName)) Throw("Font list file not found:\n" + fileName)
number fileID = OpenFileForReading(fileName)
object fileStream = NewStreamFromFileReference(fileID, 1)
result("\n SIZE:" + fileStream.StreamGetSize() )
// Output format is
// #1:(empty)
// #2: Name
// #3: ----
// #4+: FontNames
string line
for(number i=0;i<3;i++) fileStream.StreamReadTextLine(0, line)
number inc = 0
while(fileStream.StreamGetPos() != fileStream.StreamGetSize())
{
if (!fileStream.StreamReadTextLine(0, line)) break;
tg.TagGroupInsertTagAsString(Infinity(), line)
if (ShiftDown()) exit(0)
}
return tg
}
TagGroup GetFontList()
{
TagGroup tg = NewTagGroup()
string fileName = "C:\\FontNamesList.txt"
if (DoesFileExist(fileName)) DeleteFile(fileName)
WriteFontListToDisk(fileName)
tg = ReadFontListFromFile(fileName)
if (DoesFileExist(fileName)) DeleteFile(fileName)
return tg
}
GetFontList().TagGroupOpenBrowserWindow("Fonts" , 0)
Стоит отметить, что PowerShell по умолчанию выходной потоки текста как UNICODE и что не очень хорошо работает с текстом -импортировать в DM. Однако this question был полезен, и вышеприведенный сценарий устанавливает вывод в ASCII. Одна из проблем заключается в том, что при этом некоторые символы могут быть потеряны, и может потребоваться тщательная проверка выходного списка шрифтов.
Хороший вопрос! Я не знаю, какая команда скриптов выполняет то, что вам нужно, но, насколько мне известно, список «доступных» шрифтов такой же, как если бы вы щелкнете правой кнопкой мыши текстовую аннотацию и посмотрите, что вы видите шрифты. Список заполняется ОС. – BmyGuest
Если вам нужно систематически получить доступ к списку, вы можете создать себе вспомогательный метод, используя команду LaunchExternal() вместе с f.e. Powershell. Это может быть [полезное чтение] (http://superuser.com/a/760632/544823) – BmyGuest
Большое спасибо за отличный совет. Я рассмотрю это. –