| 
 
 
 
				
					|  Описание: вопросы о том, как автоматизировать загрузку новых шрифтов и новой раскладки клавиатуры |  
  					| Поиск в теме | Версия для печати |  
					| 
				
					| Жанызак | Отправлено: 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:Будут перебраны все файлы с расширением ttf.fname = Dir$("папка_с_шрифтами\*.ttf") 
 Жанызак пишет:Нет, она не остановится. Остальные шрифты будут установлены. Но это действительно проблема. Я подумаю.А наличие уже имеющегося фонта в системе даст отказ в установке по причине того, что устанавливаемый фонт в системе УЖЕ имеется. И программа остановится.. 
 |  
					|  |   |  
				
					| Жанызак | Отправлено: 13 Февраля, 2006 - 18:35:26   |  
					| 
 Newbie
 
  
 Покинул форум
 Сообщений всего: 34
 Дата рег-ции: Сент. 2005
 
 Карма 0
 
 
 
 
  
 | Здравствуйте, уважаемый Леголес. Дабы не огорчать Вас, я до сих пор не писал о неурядицах с бат-файлом..
 Раз Вы просите, то напишу..
 
 Вот текст присланного Вами бат-файла:
 
 CODE:@ECHO OFFSET 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 /yREGEDIT /s kbdinall.reg
 и в вин_98 записывалась раскладка для вин_ХР kbdinall.dll в папку \system32\ и в реестре для вин_98 записывалась раскладка для вин_ХР  kbdinall.dll.
 
 Вот такие пироги.
 Тут я взял Ваш бат-файл и слегка переделал вот таким образом:
 
 CODE:@ECHO OFFSET 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 /yIF 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
 
 
 
 
  
 | Жанызак пишет:Да... Я тут маху дал. Дело в том, что сначала переменная W9X очищалась:строка:Код:
 IF "%W9X%"=="1" COPY kbdinall.kbd %windir%\system\kbdinall.kbd /y
 совершенно отказывалась работать!
 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 /yIF 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 OFFSET 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:Эта заковыристая конструкция определяет тип операционки. После её срабатывания в переменной W9X хранится 1 для старых виндовсов и ничего - для новых.VER | FIND /I /C "Windows 9" | CHOICE /N /C01 > nulIF ERRORLEVEL 2 SET 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 заставляет её не запрашивать подтверждение.REGEDIT /s %regfile% 
 CODE:Копируем файлы шрифтовCOPY fonts\*.* %windir%\fonts /y 
 CODE:Копируем и регистрируем раскладку для Win9xIF "%W9X%"=="1" COPY kbdinall.kbd %windir%\system\kbdinall.kbd /yIF "%W9X%"=="1" REGEDIT /s inall_98.reg
 
 CODE:или для NT/2k/XPIF NOT "%W9X%"=="1" COPY kbdinall.dll %windir%\system32\kbdinall.dll /yIF NOT "%W9X%"=="1" REGEDIT /s inall_xp.reg
 
 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 /yIF "%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
 
 
 
 
  
 | Жанызак пишет:Межете попробовать архиватор 7-zip Он обеспечивает лучшее сжатие.Зип_файл = 13 мегабайт. 
 Жанызак пишет:А как это не программно делается? Нет, добавмть французскую раскладку я могу, и через панель управления и даже програмно, но кыргызской в списках вроде как нет. Как вы её туда добавляете?как программно ввести новый язык на языковой панели? 
 Жанызак пишет:В новых виндовсах есть программа restart по моему. Ещё есть WinAPI-функция SHExitWindowsEx, сейчас я не помню как это всё применять, попробую поднять документацию, но это уже завтра.надо бы ПЕРЕГРУЗГКУ компьютера тоже автоматизировать, то есть, программно ПЕРЕГРУЗИТЬ. |  
					|  |   |  |  
					| Поиск в теме | Версия для печати |  
  					| Страниц (6): « 1 2 3 [4] 5 6 » |  
  					| Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0) |  
  					| « Ваш компьютер » |  
 
 
				
					| Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе.
 Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 
 |     |  
 
 
 |