Перейти к содержимому



  • Вы не можете создать новую тему
  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1
OFFLINE   martyn-k

martyn-k

    Junior Member

  • Пользователи
  • Pip
  • 9 сообщений

Есть такой скрипт FontList Plus. Как он получил список всех шрифтов???

Т е я хочу дать пользователю навыбирать своих любимых шрифтов, но не из тех, что перечислены мной в теле скрипта, а из тех шрифтов, которые У ПОЛЬЗОВАТЕЛЯ установлены. Но для этого через скрипт нужно получить список всех системных шрифтов. К это сделать??


Сообщение отредактировал martyn-k: 29 Январь 2017 - 00:25


#2
OFFLINE   Rey

Rey

    Regular Member

  • Пользователи
  • PipPipPip
  • 134 сообщений

Через Flash компонент.

Уже никак, Flash не поддерживается в новых версиях.


  • martyn-k это нравится

#3
OFFLINE   martyn-k

martyn-k

    Junior Member

    Топикстартер
  • Пользователи
  • Pip
  • 9 сообщений

угу. так и есть. проверил. не работает.

Мой товарищ каким-то скриптом из афтера калькулятор запускал. Не может ли такое внешнее взаимодействие помочь? Например запустить из афтера батник, или флеш, который exe? Чтоб флеш не встраивался, а раз он умеет получать список шрифтов, то выудить из него список.



#4
OFFLINE   Rey

Rey

    Regular Member

  • Пользователи
  • PipPipPip
  • 134 сообщений

Может.

var cmd = '"' + fullPathToOSFontsExe + '" ' + param;
var oSFonts = system.callSystem(cmd);


#5
OFFLINE   martyn-k

martyn-k

    Junior Member

    Топикстартер
  • Пользователи
  • Pip
  • 9 сообщений

Спасибо. До решения пока ни руки ни мозги не доходят.

Из того, что выдает списокк шрифтов (из простых ср [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") (New-Object System.Drawing.Text.InstalledFontCollection).Familiesot;System.Drawing") (New-Object System.Drawing.Text.InstalledFontCollection).Families

(Пока не могу записать список ни в файл, ни как-от иначе использовать, print"> syst system.callSystem("cmd.exe /c cscript.exe D:\ae\scripts\TEST_TEMP_SCRIPTS\fonts/p>   const HKEY_LOCAL_MACHINE = &H80000002 strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")   wscript.echo "File Name" & vbTab & vbTab & "Font Family Name" wscript.echo "---------------------------------------------------------------"   oReg.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames For each strValueName in arrValueNames     oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue     wscript.echo strValue & vbTab & vbTab & ValueName in arrValueNames     oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue     wscript.echo strValue & vbTavbTab & ValueName in arrValueNames     oReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue     wscript.echo strValue & vbTa

Все одним блоком опубликовалось. Вот линки на ресурсы по теме, кому интересно

http://superuser.com...d-font-families

https://www.experts-...font-names.html



#6
OFFLINE   martyn-k

martyn-k

    Junior Member

    Топикстартер
  • Пользователи
  • Pip
  • 9 сообщений

Кому интересно, как получить список шрифтов в Windows (в маке не знаю, возможно ли):

var fonts_arr = get_font_list (false).replace(/& /g, "\n").split("\n");
var w = new Window("palette {preferredSize: [300, 200]}", "", undefined, {resizeable:true});
w.add("dropdownlist", undefined, fonts_arr);
w.show();

function get_font_list (replace)
{ 
          var data_folder_name = "u_data";
          var fonts_file_name = "font_list.txt";
          var script_name = "get_fonts.vbs";
          if ($.os.indexOf("Windows") != -1)
          {
                 var data_folder = new Folder("~" + "\\" + data_folder_name);
                 if (!data_folder.exists) data_folder.create();
                 
                 var data_folder_fs_name = data_folder.fsName.replace(/\\/g, "\\\\");
                 
                 var system_fonts_folder = Folder(Folder.system.parent.fsName + "\\Fonts");

                 var font_list_file = new File(data_folder_fs_name + "\\" + fonts_file_name);

                 if (font_list_file.exists && (font_list_file.modified.getTime() > system_fonts_folder.modified.getTime()))
                 {
                        return read_txt (font_list_file);
                 }
                 
                 var script_fs_name = data_folder_fs_name + "\\" + script_name;
                                                      
                 var script_file = new File(script_fs_name);
                 if (!script_file.exists)
                 {
                        var vbs_code = 'GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\default:StdRegProv")._\
EnumValues &H80000002, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts", arrNames\
n = UBound(arrNames)\
Do\
    nn = -1\
    For j = LBound(arrNames) to n - 1\
        If arrNames(j) > arrNames(j + 1) Then : TempValue = arrNames(j + 1) : arrNames(j + 1) = arrNames(j) : arrNames(j) = TempValue : nn = j : End If\
    Next\
    n = nn\
Loop Until nn = -1\
For Each Name In arrNames : strValue = strValue & vbCrLf & Name : Next\
CreateObject("Scripting.FileSystemObject").CreateTextFile("' + data_folder_fs_name + '\\\\' + fonts_file_name + '",1).Write Mid(strValue, 2)';
                        script_file.open("w");
                        script_file.write(vbs_code);
                        script_file.close();
                 }
                 system.callSystem("wscript.exe " + data_folder_fs_name + "\\" + script_name);
                 return read_txt (font_list_file);
          }
          else
          {
                  //system.callSystem();//тут пока пусто
           }
}

function read_txt (txt_file)
{
    txt_file.open("r");
    var content = txt_file.read();
    txt_file.close();
    return content;
}

Самую сложную часть помогли вот тут: http://forum.script-...=113004#p113004

Там же можно заглянуть в детали.


  • Rey это нравится

#7
OFFLINE   Rey

Rey

    Regular Member

  • Пользователи
  • PipPipPip
  • 134 сообщений

Серьезная работа.  :up:

А напрямую (без записи в файл) можно ответ от VBS получить?



#8
OFFLINE   martyn-k

martyn-k

    Junior Member

    Топикстартер
  • Пользователи
  • Pip
  • 9 сообщений

Спасибо, Rey, Вы ж задали направление!

Да, можно код VBS или JS впихнуть напрямую в system.callSystem(), но мне было сложно правильно передать параметры, а это строка в строке в строке.., да и чувствитьельное оно, короче, я устал экспериментировать...

Еще бы такое придумать и для мака... :)






Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных