1 (изменено: DD, 2016-07-22 17:27:07)

Тема: AHK: Сохранение HTML-файлов из браузера — в CHM

Скрипт компилирует HTML-файлы, открытые в браузере — в CHM, по клавише CapsLock + S. В приложенном архиве лежит с используемыми им hhc.exe и hha.dll.
Возник вопрос по кодировке текста для переменной %Html_Title_Name% (заголовок из тегов TITLE индексного HTML), который в default.hhp (в строку заголовка CHM-файла) попадает в нечитаемом виде. Как исправить?

SendMode Input
SetBatchLines, -1
#SingleInstance Force

;Рабочая папка (не для файлов из архива htm2chm.rar)
Chm_Tmp_Pth = C:\Chm_Tmp

CapsLock & sc1F:: 	;CapsLock+S
   IfNotExist, %Chm_Tmp_Pth%     ;создаем временную папку CHM
      FileCreateDir, %Chm_Tmp_Pth%
   Else             ;если она уже сущ — перед новой компиляцией очищаем её от всего
      FileRecycle, %Chm_Tmp_Pth%\*

   ;открываем диалог (запоминаем имя) и сохраняем во временную папку CHM как index.html
   Send, ^{sc1f}                    ; Ctrl+S
   WinWait, ahk_class #32770,, 3
   If ErrorLevel
      Return

   WinWaitActive, ahk_class #32770
   WinActivate, ahk_class #32770
   WinGet, f_window_id, ID, A
   WinActivate ahk_id %f_window_id%
   ControlGetText, 1Html_Title_Name, Edit1, ahk_id %f_window_id%
   Sleep, 100
   ControlSetText, Edit1, %Chm_Tmp_Pth%\index.html, ahk_id %f_window_id%
   Sleep, 100
   ControlSend, Edit1, {Enter}, ahk_id %f_window_id%

   SplashImage,, FS12 B1 CT0000FF, Редактирую...

   IfNotExist, %Chm_Tmp_Pth%\index.html
      Sleep, 200
   IfNotExist, %Chm_Tmp_Pth%\index.html
      Sleep, 100
   IfNotExist, %Chm_Tmp_Pth%\index.html
      Sleep, 200
   IfNotExist, %Chm_Tmp_Pth%\index.html
      Sleep, 300
   IfNotExist, %Chm_Tmp_Pth%\index.html
      Sleep, 2000

   FileRead, Index_Html, %Chm_Tmp_Pth%\index.html
   if not ErrorLevel ; Загрузка успешна
   {
      Sleep, 100
      Loop, 1
      {   ; дописываем в индексный HTML, чтобы в CHM-файле потом блокировались ошибки сценариев:
          StringReplace, Index_Html, Index_Html, <head>, <head><script type=`"text/javascript`">window.onerror=function`(`)`{return true`}</script>, All
      }
   FileDelete, %Chm_Tmp_Pth%\index.html
   FileAppend, % Index_Html, %Chm_Tmp_Pth%\index.html
   }

   ; обработка заголовка
   Html_Title_Name := RegExReplace(Index_Html, "is).*<title>(.*)</title>.*", "$1")
   Html_Title_Name := ComUnHTML(Html_Title_Name)
   StringReplace, Html_Title_Name, Html_Title_Name, ", ', All  ;программистск кавычек не должно быть
   Html_Title_Name = %Html_Title_Name%

   ; обработка запрещ симв для названия 
   Chm_Name = %1Html_Title_Name%
   Chm_Name := RegExReplace(Chm_Name, "^(.*?)\.(htm|html)$", "$1")
   StringReplace, Chm_Name, Chm_Name, `:, `-, All
   StringReplace, Chm_Name, Chm_Name, `?, `_, All
   StringReplace, Chm_Name, Chm_Name, `<, `(, All
   StringReplace, Chm_Name, Chm_Name, `>, `), All
   StringReplace, Chm_Name, Chm_Name, `\, --, All
   StringReplace, Chm_Name, Chm_Name, `/, --, All
   StringReplace, Chm_Name, Chm_Name, `*, --, All
   StringReplace, Chm_Name, Chm_Name, `|, --, All
   Chm_Name := ComUnHTML(Chm_Name)
   Chm_Name = %Chm_Name%

   SplashImage, Off

   ; Диалог сохранения CHM-файла выводится перед подготовкой и компиляцией, для быстроты
   FileSelectFile, Res_Chm, S, %Chm_Tmp_Pth%\%Chm_Name%.chm, Укажите путь для сохранения файла, 

   ; список всех файлов и папок из временной папки (для файла hhp)
   Loop, %Chm_Tmp_Pth%\*.* , 1, 1             ; (файлы-папки)
      list .= A_LoopFileLongPath "`n"
   Sort, list

   hhp =
   ( LTrim Join
     [OPTIONS]`n
     Compatibility=1.1 or later`n
     Compiled file=%Chm_Tmp_Pth%\%Chm_Name%.chm`n
     Default window=main`n
     Default topic=index.html`n
     [WINDOWS]`n
     main="%Html_Title_Name%",,,"index.html",,,,,,262432,,1056828,[10,10,810,610],,,3,1,,,0`n
     [FILES]`n
     %list%
   )
   FileAppend, % hhp, %Chm_Tmp_Pth%\default.hhp

   IfNotExist, %Chm_Tmp_Pth%\default.hhp
      Sleep, 100
   IfNotExist, %Chm_Tmp_Pth%\default.hhp
      Sleep, 100
   IfNotExist, %Chm_Tmp_Pth%\default.hhp
      Sleep, 100
   IfNotExist, %Chm_Tmp_Pth%\default.hhp
      Sleep, 100
   IfNotExist, %Chm_Tmp_Pth%\default.hhp
      Sleep, 100
   IfNotExist, %Chm_Tmp_Pth%\default.hhp
      Sleep, 300

   SplashImage,, FS12 B1 CT0000FF, Компилирую...
   RunWait, "%A_ScriptDir%\hhc.exe" "%Chm_Tmp_Pth%\default.hhp",, Hide
   SplashImage, Off

   ; сохраняем по указанному пути
   FileCopy, %Chm_Tmp_Pth%\%Chm_Name%.chm, %Res_Chm%

   AllSubFlFldList =
   Index_Html =
   list =
   hhp =
Return

ComUnHTML(html) {
   oHTML := ComObjCreate("HtmlFile")
   oHTML.write(html)
   return oHTML.documentElement.innerText
}
Post's attachments

htm2chm.rar 430.14 kb, 7 downloads since 2016-07-22 

You don't have the permssions to download the attachments of this post.