Ну все, разобрался. Проблема исчезновения словарика наконец снята
Тестировались следующие версии:
1) Версия 5.00NJStar Japanese WP 5.00.40518
NJStar Chinese WP 5.00.40518
2) Версия 5.01NJStar Japanese WP 5.01.41108
NJStar Chinese WP 5.01. 41108
Пять последних цифр скорее всего означают дату билда, тогда получается 18.05.2004 и 08.11.2004. Сейчас на сайте NJStar доступны для скачивания именно версии 5.01.41108.
Счетчик запусков программы, как я и предполагал, запрятан в реестр под вполне невинный параметр, к NJStar вроде бы и не относящийся. Но прежде чем говорить об этом стоит сказать об
отличиях, которые существуют между версиями 5.00 и 5.01:
а) В версии 5.00 количество запусков, до отключения словарика - 60, в 5.01 их уже 90. Еще раз повторю, не к дате инсталляции привязывается программа, а к количеству запусков, хоть и пишет потом, что вы использовали программу больше 90 дней.
б) В версии 5.00 после отключения словарика - соответствующие кнопки "затеняются" и их уже не нажать, в версии 5.01 - кнопки не "затеняются", их нажать можно, на что появится окошко с сообщением, приведенным в постах выше.
в) В версии 5.00 один счетчик запусков, скрытый в реестре, в версии 5.01 их уже два, первый - все тот же, а второй реализован так, что обычными средствами этот параметр в реестре даже не удалить и не просмотреть.
г) Начиная с версии 5.01 экзэшник (пусковой файл программы) стал паковаться каким-то протектором. Вполне возможно, что это EXECryptor, но так как я этими вещами не занимаюсь, то могу судить о протекторе лишь по косвенным данным. Например, тем же "неудаляемым" параметрам из реестра. Именно EXECryptor делает такие и именно в том же месте. Так как данные о протекторе лишь косвенные, а имя нам особо и не нужно, то на этом и остановимся.
д) Из-за появления двух счетчиков в версии 5.01, алгоритм взаимодействия между ними и продуктами (это важно!) NJStar, установленными в системе изменился. И вот как он выглядит (пока объясняю без реальных имен):
"счетчик А" - открытый параметр, имеет вид "XX YY ZZ" (три цифры через пробел)
Первая цифра - количество запусков какого-то продукта NJStar, у меня его нет, так что не знаю какого
Вторая цифра - количество запусков NJStar Japanese WP
Третья цифра - количество запусков NJStar Chinese WP
"счетчик А" существовал всегда. Един для трех продуктов NJStar (два нам уже известны), т.е. каждая программа обращается к одному и тому же параметру, но к определенной цифре.
"счетчик Б" - "неудаляемый" параметр, появившийся в версии 5.01, его вид нас не особо интересует, заниматься его расшифровкой никому не нужно, важно знать, что там хранится количество запусков продуктов NJStar (заметьте, продуктов, а не одного какого-то). В любом случае Japanese и Chinese - точно. Причем, каждый из продуктов версии 5.01 имеет свой независимый "счетчик Б"! А это означает, что информация о количестве запусков дублируется неоднократно. Например, если у нас в системе установлены NJStar Japanese WP и NJStar Chinese WP (оба версий 5.01), то у нас будет один "счетчик А" и два "счетчика Б", в которых независимо будут хранится данные о запусках и японской и китайской версий, которые конечно могут не совпадать, но как происходит восстановление и синхронизация см. ниже.
Алгоритм для версии 5.00 прост.
Программа читает "счетчик А" (свою цифру), инкрементирует, и в зависимости от нее поступает тем или иным образом (разрешает или запрещает словарь). Исправив этот счетчик, можно сбросить количество запусков. Все.
Алгоритм для версии 5.01 более продуманный.
Запускаем, к примеру, NJStar Japanese WP 5.01.
Программа читает весь "счетчик А" и свой "счетчик Б".
Если цифра YY (количество запусков NJStar JWP) "счетчика А" меньше записанной в "счетчике Б", то она восстанавливает цифру YY "счетчика А" из "счетчика Б", затем инкрементирует YY и "счетчик Б" и записывает оба счетчика обратно в реестр. Вот почему нельзя просто сбросить "счетчик А" - он просто напросто будет восстановлен при следующем запуске!
Теперь, если цифра YY "счетчика А" больше записанной в "счетчике Б" (так может быть, либо из-за наших экспериментов, либо из-за того, что реализовано взаимодействие нескольких продуктов для защиты от сброса счетчика), то она восстанавливает уже "счетчик Б" из цифры YY "счетчика А", затем инкрементирует YY и "счетчик Б" и записывает оба счетчика обратно в реестр.
Если цифра YY "счетчика А" равна записанной в "счетчике Б", то она программа просто инкрементирует YY и "счетчик Б" и записывает оба счетчика обратно в реестр.
Но, и это еще не все! То же самое, тут же, она повторяет и для китайского счетчика и скорее всего и для первого параметра (продукт неизвестен)! Таким образом японская версия может восстанавливать нам постоянно счетчик запуска китайской версии и vice versa (конечно, с поправкой на то, что одна прога может быть 5.00, а другая 5.01, тогда восстанавливать сможет лишь одна).
Что же происходит. Программа читает цифру ZZ и если она больше записанной в ее "счетчике Б" (например, мы пользовались китайской версией до запуска японской), то программа просто обновляет свой "счетчик Б" значением ZZ. Больше ничего не делает. Так происходит дублирование счетчика запусков.
Если цифра ZZ меньше записанной в "счетчике Б" (мы постарались), то она просто восстанавливает цифру ZZ. (А уже потом китайская версия, при запуске, восстановит из нее свой "счетчик Б", вот как все хитро).
Если цифра ZZ равна записанной в "счетчике Б" (никто ничего не делал, с момента последнего запуска японской проги, китайскую не запускали), то ничего не происходит.
Вот алгоритм взаимодействия программ и счетчиков для версии 5.01. Китайская версия при запуске делает то же самое с поправкой на имена переменных.
Соответственно, сбросить счетчик для версии 5.01 можно так:Установить "счетчик А" в "0 0 0" и просто удалить оба "счетчика Б", либо один, либо три. Зависит от того, какие продукты у нас установлены. Проблема лишь в том, что просто так "счетчик Б"
не удалить. Его даже нельзя прочитать! Система просто не дает возможности это сделать. Я честно признаюсь, я не знаю как это реализовано! Но думаю, что этот метод защиты параметра работает под NT/XP/2000/2003 только, а под Windows 98, удаление пройдет гладко. Вообще думал сначала, что у меня просто нет доступа (как это бывает для ветки "
Protected Storage System Provider", например), проверил - все есть. С таким сталкиваюсь впервые. Кто знает что это - напишите!
Снимаем маски, наконец.
"Счетчик А" (версия 4.35) (даю здесь на всякий случай, чтобы не перепутали)
[HKEY_CURRENT_USER\Control Panel\Colors]
"ActiveText"="0 0 0"
"Счетчик А" (версия 5.00, 5.01)[HKEY_CURRENT_USER\Control Panel\Colors]
"ActivText"="0 0 0"
Как невинно, правда?
"Счетчик Б" для NJStar Japanese WP 5.01[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved\{0A8CFEA3-4D23-D4A3-E21A-CEB5EE9618ED}]
"cblgnbllhaecojbhmlmcgaoihhinjbgobjblpl"=hex:66,61,6e,6c,61,6f,70,6d,65,61,70,66,00,02
"Счетчик Б" для NJStar Chinese WP 5.01[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved\{31D8B5F4-462A-A947-BE8C-765E68190F8C}]
"bbfkpaapbgkgbhbcpkjadjhoneiobjnjjjbp"=hex:66,61,64,67,6b,6c,68,69,63,68,6d,67,00,02
Вот последние два параметра средствами Windows мне не только удалить, но даже просмотреть не удалось. Что скажете, в чем может быть причина?
(Требуется полностью удалить разделы {0A8CFEA3-4D23-D4A3-E21A-CEB5EE9618ED} и {31D8B5F4-462A-A947-BE8C-765E68190F8C}, а не только параметры, которые в них. Вполне возможно, что на разных машинах названия разделов также будут отличаться, а может и нет.)
Удалил же я их с помощью "
Registry Viewer 4.2", редактора реестра под DOS. Найти его можно здесь:
http://paullee.ruЭта программа позволяет входить в реестр как в файл (например, архива). Поэтому надо грузиться под DOSом с дискеты, чтобы это сделать, иначе к файлу реестра просто доступа не будет. Соответственно, чтобы его использовать вы должны знать где файл реестра находится в системе.
Рекомендую сделать копию, хотя сбоев при использовании программы не было. Если кто-то найдет способ как удалять "счетчик Б" прямо из виндов, то можно будет избежать такой процедуры.
Либо можно просто пользоваться только версиями 5.00 и периодически сбрасывать "счетчик А". Это-то легко.
Прошу прощения за долгое объяснение. Сделал это намеренно, чтобы упростить дорогу тем, кто пойдет следом.