Знакомым аналитикам, обрабатывающим большие объёмы текстовой информации, пришлась по вкусу программа Text Spotlight. Принцип её работы прост - она вешает хук на вывод текста и подсвечивает заданные слова в окнах приложений - в браузерах, редакторах, да где угодно, хоть в самих заголовках окон. Ориентироваться в тексте становится легче.


Однако у Text Spotlight есть заметный минус - список слов для подсветки может быть только один. То есть, нельзя создать несколько словарей под разные цели, хотя иногда такое бывает нужно. При этом словарь неудобно хранится в реестре в виде REG_BINARY, а меняется в настройках по одному слову кнопками Add/Delete, и всё вместе это несколько усложняет задачу достижения "многословарности".


Решал я её так.


Сначала с помощью regmon я посмотрел, куда именно Text Spotlight сохраняет свой словарь. Оказалось, что все настройки хранятся в HKEY_CURRENT_USER\Software\Text Spotlight 2.0 - ну хоть не в HKEY_LOCAL_MACHINE,хотя заводить кучу профилей ради одной софтины - тоже не вариант. Однако, таким образом, запуск программы со словарём из файла приводится к нехитрому алгоритму:


1. записать в реестр значения из этого файла
2. запустить программу
3. дождавшись ее завершения, сохранить ветку реестра в файл


Мало кто знает, что regedit.exe имеет полезные ключи запуска (в справке по regedit'у про это нет):


regedit.exe /e - экспортировать в файл .reg параметр или целую ветку реестра
regedit.exe /s - импортировать в реестр данные из файла


Таким образом задача решается даже с помощью bat-скрипта. Правда, тогда cmd.exe, исполняя bat-скрипт, будет открывать своё окно на всё время исполнения программы; не зная, как отучить cmd.exe показывать окно, я решил просто то же самое написать на vbs:


s = Wsсript.Arguments(0)
line1 = "taskkill /IM textspotlight.exe"
' (на всякий случай прибьём процесс, если он уже запущен)
line2 = "regedit.exe /s " & s & ".reg"
line3 = "textspotlight.exe"
line4 = "regedit.exe /e " & s & ".reg ""HKEY_CURRENT_USER\Software\Text Spotlight 2.0"""
set objWshShell = Wsсript.CreateObject("Wsсript.Shell")
intRC = objWshShell.Run(line1, 0, TRUE)
intRC = objWshShell.Run(line2, 0, TRUE)
intRC = objWshShell.Run(line3, 0, TRUE)
intRC = objWshShell.Run(line4, 0, TRUE)

Скрипт запускается с единственным обязательным параметром - именем файла для сохранения данных. Понятное дело, что вместо HKCU\Software\Text Spotlight 2.0 можно указать любой путь к нужной ветке и использовать скрипт с другим ПО.


Ну, запустил я скрипт с параметром "1". Создал тестовый набор из одного слова "1111". Потом запустил скрипт с параметром "2". Создал тестовый набор из слова "2222" (никакой фантазии, ага). Теперь проверяем. Запускаем "launcher.vbs 1" - подсвечивается 1111. Запускаем "launcher.vbs 2" - подсвечивается 2222. Ништяк.


Посмотрел я на это дело и задумался - а может, всё уже давно изобретено, и есть какая утилита для запуска приложений с тем или иным снапшотом веток реестра? Знает кто-нибудь?


И кстати - скачать Text Spotlight 2.0 (проверенная стабильная версия) можно здесь же, в соответствующем разделе 8))