Эта тема на forum.dklab.ru


Дмитрий Котеров: Поиск по CHM-файлам. Открытие CHM на нужном слове.
Приложенный архив содержит дистрибутив модуля Win32::Chm::Search, который умеет:

[*:fefdf1a1e9]Выделять из указанного CHM-файла все ключевые слова, которые в нем определены (показываются на вкладке Указатель просмотрщика помощи).
[*:fefdf1a1e9]Искать среди этих ключевых слов заданное (передается слово и имена файлов).
[*:fefdf1a1e9]Запускать стандартный просмотрщик помощи Windows, открывая его на странице указанного ключевого слова.


Первая и последняя функции реализуются через два EXE-файла (также находятся в архиве):

[*:fefdf1a1e9]chmview.exe — консольный «архиватор» формата CHM (только чтение) — применяется, в частности, в одном из плагинов Far-а.
[*:fefdf1a1e9]ChmKw.exe (2 КБ) — моя собственная разработка, предназначенная для открытия файла помощи на нужном ключевом слове (к сожалению, ни одна из стандартных утилит этого не умеет, так что пришлось писать свою).

Обе утилиты выдают Usage при запуске без параметров.
Enilatiar:
Что-то не работает... :(

Кстати, по-моему в модуле Search.pm, есть опечатка
my $exe = dirname(__FIlE__)."\\".$view;из-за которой имя файла вычитывается не верно.
Дмитрий Котеров:
Что-то не работает
Как именно «не работает»? Приложенный пример-то работает хотя бы? Просто нажмите в нем Enter.

__FIlE__
Спасибо, действительно опечатка. Но он просто из текущей директории тогда берет файл, насколько я понимаю.

Исправленный архив прикладываю.
Enilatiar:
WinXP pro. Распакован весь архив "как есть". C:\temp>test_chm.pl
Using test file test_chm.chm
Keyword to find ["change" by default - press Enter]:
'chmview.exe' is not recognized as an internal or external command,
operable program or batch file.
Exiting subroutine via next at Win32/Chm/Search.pm line 16, <STDIN> line 1.
Search results: $VAR1 = [];

Если файл chmview.exe выложить туда, где лежить test_chm.pl, то тестовый пример срабатывает. Хотя я не понял по какому принципу выбраны топики. В частности, не понимаю почему постоянно дописывается что-то типа "... used in Chat".
Решил найти какое-нибудь редкое слово. Выбрал visible, получил C:\temp>test_chm.pl
Using test file test_chm.chm
Keyword to find ["change" by default - press Enter]: visible
Search results: $VAR1 = [];

Дмитрий Котеров:
Это потому, что в CHM-файлах можно быстро искать (не распаковывая) только по ключевым словам, а ключевые слова составляются заранее (может, автоматически) и отображаются в соответствующей закладке. Так что если ключевых слов мало — извиняйте, ту ничего не поделаешь.

Насчет дополнения: это он перебирает все ключевые слова и те, которые совпали с посиковым выражением (это может быть подстрока), возвращает.

Насчет глюка: спасибо. У меня просто chmview.exe сидел еще и в PATH, так что я никак не мог отладить код. Прикладываю исправленную версию — на этот раз полностью рабочую, будем надеяться.
Ant:
После долгих мучений, выяснилось, что распаковать CHM-файл в определенную директорию можно так:
hh.exe -decompile folder file.chm

Открыть CHM-файл на нужной странице можно так:
hh.exe mk:@MSITStore:test_chm.chm::/html_file_in_chm.htm

То есть, система такая: распаковываем CHM-файл с помощью первой команды (кстати сказать, она распаковывает не все файлы из CHM-«архива», а только самые необходимые: все HTML, CSS, IMG и несколько структурных файлов [вроде бы всего 2-3 файла]). Затем ищем в них и потом используем вторую команду для открытия CHM-файла на нужной странице.

Внимание. «hh.exe» — стандартная утилита в Windows. Приведенный выше код работал у меня и под XP и под Me. Но только под Win. Ищется подобная утилита, которая работает в *nix.
bæv:
Ветка выделена в отдельную тему «мусор, не относящийся к теме»,
расположенную в форуме Мусоропровод (12 Февраля 2012, 20:46).

Эта тема на forum.dklab.ru