Strict Standards: Resource ID#33 used as offset, casting to integer (33) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#35 used as offset, casting to integer (35) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#36 used as offset, casting to integer (36) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Автозагрузка шрифтов и новой раскладки клавиатуры [4]
ТвойWeb » Обо всем понемногу » Ваш компьютер » Автозагрузка шрифтов и новой раскладки клавиатуры

Страниц (6): « 1 2 3 [4] 5 6 »
 

31. Жанызак - 09 Февраля, 2006 - 19:37:33 - перейти к сообщению
Уважаемый Леголес, здравствуйте.

А как указать папку, где лежат фонты? --------- fname = Dir$("*.ttf"Подмигивание ------------

И как перечислять фонты? Или это не нужно - сам возьмет следующие по списку фонты через loop?
Например, папка myfont, и там список 10 фонтов..

Тогда:
fname = myfont ("1.ttf" | "2.ttf" | "3.ttf"Подмигивание

или как?



Еще очень важный вопрос:
я, конечно, назвал свои фонты совершенно уникально с тем, чтобы не было сбоя при установке шрифтов.
Но может получиться так, что клиент захочет повторно установить по этой программе.
А наличие уже имеющегося фонта в системе даст отказ в установке по причине того, что устанавливаемый фонт в системе УЖЕ имеется. И программа остановится..

Как сделать так, чтобы фонты устанавливались принудительно независимо от того, имелись ли они во время установки в системе?

Например, Arial майкрософтовский устанавливается несмотря на то, что он в системе УЖЕ имеется. Его распаковщик устанавливает его принудительно.

Можно ли этого добиться программно?

Или по другому:
пред установкой, скажем, фонта 0JanArial, программа запрашивает, имеется ли таковой фонт в системе. Если имеется, то тот фонт с системы удаляется, затем устанавливается новый фонт 0JanArial..

Это еще нужно потому, что может возникнуть надобность модернизировать фонт, добавить какие-то новые буквы, но не хочется менят название фонта..

Надеюсь, я смог объяснить, что нужно.

Спасибо за возможный ответ.

Жанызак.
.
32. Леголегс - 12 Февраля, 2006 - 04:05:08 - перейти к сообщению
Жанызак пишет:
А как указать папку, где лежат фонты?

CODE:
fname = Dir$("папка_с_шрифтами\*.ttf")
Будут перебраны все файлы с расширением ttf.
Жанызак пишет:
А наличие уже имеющегося фонта в системе даст отказ в установке по причине того, что устанавливаемый фонт в системе УЖЕ имеется. И программа остановится..
Нет, она не остановится. Остальные шрифты будут установлены. Но это действительно проблема. Я подумаю.
33. Жанызак - 12 Февраля, 2006 - 15:18:53 - перейти к сообщению
Уважаемый Леголес, здравствуйте.
Вот теперь обратный вопрос:
Допустим, все хорошо, все установлено. Но в один день клиенту не понравилась раскладка или же фонты. Их надо убрать.
То есть, с папки System32 убрать файл kbdinall.dll
и с папки Fonts убрать все фонты 0JanArial и проч.
и с regedit убрать записи про фонтов..

Я уже слегка знаю, как делается с фонтами программно - Вы написали мне об этом:

Private Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" (ByVal lpFileName As String) As Long


Но:
1.
как там прописать все названия фонтов?
2.
Можно ли это сделать с помощью bat-файла?

Извините, что закидал Вас вопросами: надеюсь, ответы на эти вопросы наверняка заинтересует и других участников данной темы.

С уважением Вашего долготерпения

Жанызак.
.
34. Леголегс - 13 Февраля, 2006 - 13:48:06 - перейти к сообщению
Жанызак
Я только что поэкспериментировал и нифига не понял. Беру шрифт из папки fonts и (сделав предварительно резервную копию) жму delete. Шрифт удаляется, в т.ч. из реестра. Затем применяю любой из трёх способов: перетаскивание в папку fonts, оператор FileCopy в VB или выполнение через командную строку команды DOS "copy". При любом раскладе шрифт отображается в папке fonts и каким-то непонятным образом прописывается в реестре там где нужно.
"Иван Петрович считает произошедшее оптическим обманом и обижается" (c) Д. Хармс. Ранее в этой теме в ходе изысканий я пришёл к противоположным выводам. Чтобы не сойти с ума [окончательно] я больше не ковыряюсь с этими censoredшрифтами. Жанызак, я по прежнему горю желанием вам посодействовать, но будьте добры окончательно и на 100% прояснить ситуацию с реакцией системы на копирование файлов со шрифтами в положенную папку.
35. Жанызак - 13 Февраля, 2006 - 18:35:26 - перейти к сообщению
Здравствуйте, уважаемый Леголес.
Дабы не огорчать Вас, я до сих пор не писал о неурядицах с бат-файлом..
Раз Вы просите, то напишу..

Вот текст присланного Вами бат-файла:
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).


==============

Окончательная просьба:
в бат-файле уточните, пож., момент выбора операционки более корректно.

С уважением
Жанызак.
36. Леголегс - 15 Февраля, 2006 - 04:23:49 - перейти к сообщению
Жанызак пишет:
строка:
Код:
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:
@ECHO OFF
чтобы на экране не писались все эти команды. Так сказать "тихий режим"
CODE:
SET regfile="%temp%\tempreg.reg"
переменная с именем временного файла
CODE:
SET W9X=
на всякий случай очищаем переменную
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=
Опустошаем использованные переменные в конце работы.
37. Жанызак - 15 Февраля, 2006 - 18:16:36 - перейти к сообщению
Уважаемый Леголес, здравствуйте.
Я сегодня же попробую, спасибо.

Осторожный вопрос:
четвертая строка, вот тут:
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


А какие еще бывают ключи, если конечно у Вас есть время.

Спасибо еще раз.

С уважением
Жанызак.
.
38. Леголегс - 16 Февраля, 2006 - 12:02:04 - перейти к сообщению
Жанызак пишет:
"Windows 9" случайно не "Windows 9Х"?
Нет Улыбка Windows 95 представляется как "Windows 95", Windows 98 как "Windows 98". Строка "Windows 9" есть и там и там Улыбка
Жанызак пишет:
Поясните пож., ключ /y - для любопытства.
"копировать не переспрашивая"
Жанызак пишет:
А какие еще бывают ключи
CODE:
/?
Подмигивание
39. Жанызак - 01 Мая, 2006 - 21:36:03 - перейти к сообщению
Здравствуйте, уважаемый Леголес и другие болельщики данной темы.
Я почти полностью закончил эту программу на двух языках.
Общий весь со всеми сопутствующими обучающими файлами составил 24 Мегабайт.
Зип_файл = 13 мегабайт.
Вот сколько загнул..

Просьба:
как программно ввести новый язык на языковой панели?
Дело в том, что кроме EN и RU языков, нужно потребителю ввести и KY (kyrgyz) язык, если он вдруг захочет.
Я в одном файле дал описание со всеми картинками, как вводить новый язык в компьютер, но хотелось бы автоматизировать это дело...

Еще один вопрос:
надо бы ПЕРЕГРУЗГКУ компьютера тоже автоматизировать, то есть, программно ПЕРЕГРУЗИТЬ.

Большое спасибо за возможный ответ.



40. Леголегс - 02 Мая, 2006 - 15:57:50 - перейти к сообщению
Жанызак пишет:
Зип_файл = 13 мегабайт.
Межете попробовать архиватор 7-zip Он обеспечивает лучшее сжатие.
Жанызак пишет:
как программно ввести новый язык на языковой панели?
А как это не программно делается? Нет, добавмть французскую раскладку я могу, и через панель управления и даже програмно, но кыргызской в списках вроде как нет. Как вы её туда добавляете?
Жанызак пишет:
надо бы ПЕРЕГРУЗГКУ компьютера тоже автоматизировать, то есть, программно ПЕРЕГРУЗИТЬ.
В новых виндовсах есть программа restart по моему. Ещё есть WinAPI-функция SHExitWindowsEx, сейчас я не помню как это всё применять, попробую поднять документацию, но это уже завтра.

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0383]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33