Описание: вопросы о том, как автоматизировать загрузку новых шрифтов и новой раскладки клавиатуры |
Поиск в теме | Версия для печати |
Жанызак |
Отправлено: 09 Февраля, 2006 - 19:37:33
|
Newbie
Покинул форум
Сообщений всего: 34
Дата рег-ции: Сент. 2005
Карма 0
|
Уважаемый Леголес, здравствуйте.
А как указать папку, где лежат фонты? --------- fname = Dir$("*.ttf" ------------
И как перечислять фонты? Или это не нужно - сам возьмет следующие по списку фонты через loop?
Например, папка myfont, и там список 10 фонтов..
Тогда:
fname = myfont ("1.ttf" | "2.ttf" | "3.ttf"
или как?
Еще очень важный вопрос:
я, конечно, назвал свои фонты совершенно уникально с тем, чтобы не было сбоя при установке шрифтов.
Но может получиться так, что клиент захочет повторно установить по этой программе.
А наличие уже имеющегося фонта в системе даст отказ в установке по причине того, что устанавливаемый фонт в системе УЖЕ имеется. И программа остановится..
Как сделать так, чтобы фонты устанавливались принудительно независимо от того, имелись ли они во время установки в системе?
Например, Arial майкрософтовский устанавливается несмотря на то, что он в системе УЖЕ имеется. Его распаковщик устанавливает его принудительно.
Можно ли этого добиться программно?
Или по другому:
пред установкой, скажем, фонта 0JanArial, программа запрашивает, имеется ли таковой фонт в системе. Если имеется, то тот фонт с системы удаляется, затем устанавливается новый фонт 0JanArial..
Это еще нужно потому, что может возникнуть надобность модернизировать фонт, добавить какие-то новые буквы, но не хочется менят название фонта..
Надеюсь, я смог объяснить, что нужно.
Спасибо за возможный ответ.
Жанызак.
. |
|
|
Леголегс |
Отправлено: 12 Февраля, 2006 - 04:05:08
|
JS-маньяк
Покинул форум
Сообщений всего: 2109
Дата рег-ции: Июль 2004
Откуда: Липецк
Карма 17
|
Жанызак пишет:А как указать папку, где лежат фонты?
CODE:fname = Dir$("папка_с_шрифтами\*.ttf") Будут перебраны все файлы с расширением ttf.
Жанызак пишет:А наличие уже имеющегося фонта в системе даст отказ в установке по причине того, что устанавливаемый фонт в системе УЖЕ имеется. И программа остановится.. Нет, она не остановится. Остальные шрифты будут установлены. Но это действительно проблема. Я подумаю.
|
|
|
Жанызак |
Отправлено: 13 Февраля, 2006 - 18:35:26
|
Newbie
Покинул форум
Сообщений всего: 34
Дата рег-ции: Сент. 2005
Карма 0
|
Здравствуйте, уважаемый Леголес.
Дабы не огорчать Вас, я до сих пор не писал о неурядицах с бат-файлом..
Раз Вы просите, то напишу..
Вот текст присланного Вами бат-файла:
CODE:@ECHO OFF
SET regfile="%temp%\tempreg.reg"
SET W9X=
VER | FIND /I /C "Windows 9" | CHOICE /N /C01 > nul
IF ERRORLEVEL 2 SET W9X=1
ECHO REGEDIT4 > %regfile%
ECHO. >> %regfile%
IF "%W9X%"=="1" ECHO [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Fonts] >> %regfile%
IF NOT "%W9X%"=="1" ECHO [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts] >> %regfile%
TYPE fonts.lst >> %regfile%
ECHO. >> %regfile%
REGEDIT /s %regfile%
SET regfile=
SET W9X=
COPY fonts\*.* %windir%\fonts /y
IF "%W9X%"=="1" COPY kbdinall.kbd %windir%\system\kbdinall.kbd /y
IF NOT "%W9X%"=="1" COPY kbdinall.dll %windir%\system32\kbdinall.dll /y
REGEDIT /s kbdinall.reg
Первоначально я с ним работал в вин_ХР, и все казалось в ажуре. Фонты устанавливались, в реестре регистрировались.
Затем раскладка kbdinall.dll устанавливалась в папке %windir%\system32\ и регистрировалась в реестре тоже.
Затем я перешел на опер.систему вин_98..
И тут бат-файл устанавливал фонты очень корректно. Но.. строка:
CODE:IF "%W9X%"=="1" COPY kbdinall.kbd %windir%\system\kbdinall.kbd /y
совершенно отказывалась работать! То есть, выбор опер_системы совершенно не работал!
Файл раскладки для вин_98 kbdinall.kbd не записывался в папку %windir%\system\kbdinall.kbd /y.
Вместо оного работала строка:
CODE:IF NOT "%W9X%"=="1" COPY kbdinall.dll %windir%\system32\kbdinall.dll /y
REGEDIT /s kbdinall.reg
и в вин_98 записывалась раскладка для вин_ХР kbdinall.dll в папку \system32\ и в реестре для вин_98 записывалась раскладка для вин_ХР kbdinall.dll.
Вот такие пироги.
Тут я взял Ваш бат-файл и слегка переделал вот таким образом:
CODE:@ECHO OFF
SET regfile="%temp%\tempreg.reg"
SET W9X=
VER | FIND /I /C "Windows 9" | CHOICE /N /C01 > nul
IF ERRORLEVEL 2 SET W9X=1
ECHO REGEDIT4 > %regfile%
ECHO. >> %regfile%
IF "%W9X%"=="1" ECHO [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Fonts] >> %regfile%
IF NOT "%W9X%"=="1" ECHO [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts] >> %regfile%
TYPE fonts.lst >> %regfile%
ECHO. >> %regfile%
REGEDIT /s %regfile%
SET regfile=
SET W9X=
COPY fonts\*.* %windir%\fonts /y
COPY kbdinall.kbd %windir%\system\kbdinall.kbd /y
REGEDIT /s kbdinall.kbd
Теперь Ваш бат-файл хорошо устанавливает в вин_98 и фонты, и раскладку для вин_98 и все это хорошо записывается в реестре.
Но вот возникла для меня в связи с этим другая проблема:
в самой программе установки фонтов и раскладок в VB мне теперь приходится искать путь, при котором программа выбирала бы сама, какая операционка установлена в компьютере.
Иначе она, эта программа, записывает и копирует только то, что выбираете ВРУЧНУЮ.
Этот момент у меня НЕ предполагался, так как программа изначальна была задумана для круглых ЛАМЕРОВ - то есть для тех, кому и НЕ нужно думать, какая там операционка, а лишь нажимать на ту кнопку, которая установит для него нужный шрифт и нужную раскладку.
В ином разе я просто объяснительным путем написал бы, что и куда нужно устанавливать, например, как в этом адресе:
http://janyzak.narod.ru/kbd/ornot.htm
Прошу Вас, уважаемый Леголес, прояснить ситуацию с возможностью выбора операционки в строках:
CODE:IF "%W9X%"=="1" COPY kbdinall.kbd %windir%\system\kbdinall.kbd /y
IF NOT "%W9X%"=="1" COPY kbdinall.dll %windir%\system32\kbdinall.dll /y
REGEDIT /s kbdinall.reg
Кстати, тут не совсем понятна запись:
CODE:REGEDIT /s kbdinall.reg
Тут тоже следовало бы сделать выбор:
если вин_98, то REGEDIT /s следует записать НЕ файл kbdinall.reg, где указаны лишь про раскладку kbdinall.dll, а тот файл, в котором бы указывалась на раскладку для вин_98 - kbdinall.kbd.
Я *.reg-файлы теперь тоже разделил:
для вин_ХР - inall_xp.reg ;
для вин_98 - inall_98.reg.
Для пояснения:
раскладка для вин_98 называется - *.kbd
раскладка для вин_ХР называется - *.dll
Если в бат-файле проясните ситуацию с выбором операционки, то больше ничего не нужно!
Бог с ним, со шрифтами, которые останутся у клиента в фонт-папке..
====================
Вот такие пироги. Задача, казалось бы, слишком усложнилось.
Между тем алгоритм был проще простого:
1. установить фонты по списку;
2. установить раскладку клавиатуры:
а) если для вин_98, то установить *.kbd-файл в систем_папку sistem
и записать в реестре;
б) если для вин_ХР, то установить *.dll-файл в систем_папку sistem32
и записать в реестре;
3. Если клиенту не понравятся шрифты или же сама раскладка, то чтобы он мог восстановить первоначальное положение, то есть, до установки фонтов и раскладки (uninstall).
==============
Окончательная просьба:
в бат-файле уточните, пож., момент выбора операционки более корректно.
С уважением
Жанызак. |
|
|
Леголегс |
Отправлено: 15 Февраля, 2006 - 04:23:49
|
JS-маньяк
Покинул форум
Сообщений всего: 2109
Дата рег-ции: Июль 2004
Откуда: Липецк
Карма 17
|
Жанызак пишет:строка:
Код:
IF "%W9X%"=="1" COPY kbdinall.kbd %windir%\system\kbdinall.kbd /y
совершенно отказывалась работать! Да... Я тут маху дал. Дело в том, что сначала переменная W9X очищалась:
SET W9X=
А затем я проверял её значение, что конечно неразумно.
Жанызак пишет:Тут тоже следовало бы сделать выбор:
если вин_98, то REGEDIT /s следует записать НЕ файл kbdinall.reg, где указаны лишь про раскладку kbdinall.dll, а тот файл, в котором бы указывалась на раскладку для вин_98 - kbdinall.kbd. Жанызак пишет:Я *.reg-файлы теперь тоже разделил:
для вин_ХР - inall_xp.reg ;
для вин_98 - inall_98.reg. Отлично, пусть будет CODE:IF "%W9X%"=="1" COPY kbdinall.kbd %windir%\system\kbdinall.kbd /y
IF NOT "%W9X%"=="1" COPY kbdinall.dll %windir%\system32\kbdinall.dll /y
IF "%W9X%"=="1" REGEDIT /s inall_98.reg
IF NOT "%W9X%"=="1" REGEDIT /s inall_xp.reg
Жанызак пишет:Если клиенту не понравятся шрифты или же сама раскладка, то чтобы он мог восстановить первоначальное положение, то есть, до установки фонтов и раскладки (uninstall). Это я попозже сделаю. Сейчас немного не до того. Но суть такая: файлы со шрифтами удалить, записи из реестра стереть. Последнее даже проще первого (хотя и первое элементарно).
Итого получается CODE:@ECHO OFF
SET regfile="%temp%\tempreg.reg"
SET W9X=
VER | FIND /I /C "Windows 9" | CHOICE /N /C01 > nul
IF ERRORLEVEL 2 SET W9X=1
ECHO REGEDIT4 > %regfile%
ECHO. >> %regfile%
IF "%W9X%"=="1" ECHO [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Fonts] >> %regfile%
IF NOT "%W9X%"=="1" ECHO [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts] >> %regfile%
TYPE fonts.lst >> %regfile%
ECHO. >> %regfile%
REGEDIT /s %regfile%
COPY fonts\*.* %windir%\fonts /y
IF "%W9X%"=="1" COPY kbdinall.kbd %windir%\system\kbdinall.kbd /y
IF "%W9X%"=="1" REGEDIT /s inall_98.reg
IF NOT "%W9X%"=="1" COPY kbdinall.dll %windir%\system32\kbdinall.dll /y
IF NOT "%W9X%"=="1" REGEDIT /s inall_xp.reg
SET regfile=
SET W9X= Давайте построчно поясню:
чтобы на экране не писались все эти команды. Так сказать "тихий режим"
CODE:SET regfile="%temp%\tempreg.reg" переменная с именем временного файла
на всякий случай очищаем переменную
CODE:VER | FIND /I /C "Windows 9" | CHOICE /N /C01 > nul
IF ERRORLEVEL 2 SET W9X=1 Эта заковыристая конструкция определяет тип операционки. После её срабатывания в переменной W9X хранится 1 для старых виндовсов и ничего - для новых.
CODE:ECHO REGEDIT4 > %regfile%
ECHO. >> %regfile% Пишем во временный регфайл пару служебных строчек.
CODE:IF "%W9X%"=="1" ECHO [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Fonts] >> %regfile%
IF NOT "%W9X%"=="1" ECHO [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Fonts] >> %regfile% Дописываем туда-же операционкозависимую строчку
CODE:TYPE fonts.lst >> %regfile%
ECHO. >> %regfile% Туда-же заранее заготовленный список шрифтов и в конце - пустую строчку
CODE:REGEDIT /s %regfile% Наконец-то применяем наш регфайл. REGEDIT - стандартная программа для работы с реестром, ключ /s заставляет её не запрашивать подтверждение.
CODE:COPY fonts\*.* %windir%\fonts /y Копируем файлы шрифтов
CODE:IF "%W9X%"=="1" COPY kbdinall.kbd %windir%\system\kbdinall.kbd /y
IF "%W9X%"=="1" REGEDIT /s inall_98.reg Копируем и регистрируем раскладку для Win9x
CODE:IF NOT "%W9X%"=="1" COPY kbdinall.dll %windir%\system32\kbdinall.dll /y
IF NOT "%W9X%"=="1" REGEDIT /s inall_xp.reg или для NT/2k/XP
CODE:SET regfile=
SET W9X= Опустошаем использованные переменные в конце работы.
|
|
|
Жанызак |
Отправлено: 15 Февраля, 2006 - 18:16:36
|
Newbie
Покинул форум
Сообщений всего: 34
Дата рег-ции: Сент. 2005
Карма 0
|
Уважаемый Леголес, здравствуйте.
Я сегодня же попробую, спасибо.
Осторожный вопрос:
четвертая строка, вот тут:
CODE:
VER | FIND /I /C "Windows 9" | CHOICE /N /C01 > nul
"Windows 9" случайно не "Windows 9Х"?
Это я спросил так, на всякий пожар..
Поясните пож., ключ /y - для любопытства.
В строках:CODE: COPY fonts\*.* %windir%\fonts /y
IF "%W9X%"=="1" COPY kbdinall.kbd %windir%\system\kbdinall.kbd /y
...
IF NOT "%W9X%"=="1" COPY kbdinall.dll %windir%\system32\kbdinall.dll /y
А какие еще бывают ключи, если конечно у Вас есть время.
Спасибо еще раз.
С уважением
Жанызак.
.
|
|
|
Леголегс |
Отправлено: 02 Мая, 2006 - 15:57:50
|
JS-маньяк
Покинул форум
Сообщений всего: 2109
Дата рег-ции: Июль 2004
Откуда: Липецк
Карма 17
|
Жанызак пишет:Зип_файл = 13 мегабайт. Межете попробовать архиватор 7-zip Он обеспечивает лучшее сжатие.
Жанызак пишет:как программно ввести новый язык на языковой панели? А как это не программно делается? Нет, добавмть французскую раскладку я могу, и через панель управления и даже програмно, но кыргызской в списках вроде как нет. Как вы её туда добавляете?
Жанызак пишет:надо бы ПЕРЕГРУЗГКУ компьютера тоже автоматизировать, то есть, программно ПЕРЕГРУЗИТЬ. В новых виндовсах есть программа restart по моему. Ещё есть WinAPI-функция SHExitWindowsEx, сейчас я не помню как это всё применять, попробую поднять документацию, но это уже завтра. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (6): « 1 2 3 [4] 5 6 » |
Сейчас эту тему просматривают: 3 (гостей: 3, зарегистрированных: 0, скрытых: 0) |
« Ваш компьютер » |
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
|
|
|