<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Сохранение HTML-файлов из браузера — в CHM]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=11838</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11838&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Сохранение HTML-файлов из браузера — в CHM».]]></description>
		<lastBuildDate>Fri, 22 Jul 2016 13:23:14 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AHK: Сохранение HTML-файлов из браузера — в CHM]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=106274#p106274</link>
			<description><![CDATA[<p>Скрипт компилирует HTML-файлы, открытые в браузере — в CHM, по клавише <strong>CapsLock + S</strong>. В приложенном архиве лежит с используемыми им hhc.exe и hha.dll. <br />Возник вопрос по кодировке текста для переменной <em>%Html_Title_Name%</em> (заголовок из тегов TITLE индексного HTML), который в default.hhp (в строку заголовка CHM-файла) попадает в нечитаемом виде. Как исправить?</p><div class="codebox"><pre><code>SendMode Input
SetBatchLines, -1
#SingleInstance Force

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

CapsLock &amp; 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, &lt;head&gt;, &lt;head&gt;&lt;script type=`&quot;text/javascript`&quot;&gt;window.onerror=function`(`)`{return true`}&lt;/script&gt;, All
      }
   FileDelete, %Chm_Tmp_Pth%\index.html
   FileAppend, % Index_Html, %Chm_Tmp_Pth%\index.html
   }

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

   ; обработка запрещ симв для названия 
   Chm_Name = %1Html_Title_Name%
   Chm_Name := RegExReplace(Chm_Name, &quot;^(.*?)\.(htm|html)$&quot;, &quot;$1&quot;)
   StringReplace, Chm_Name, Chm_Name, `:, `-, All
   StringReplace, Chm_Name, Chm_Name, `?, `_, All
   StringReplace, Chm_Name, Chm_Name, `&lt;, `(, All
   StringReplace, Chm_Name, Chm_Name, `&gt;, `), 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 &quot;`n&quot;
   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=&quot;%Html_Title_Name%&quot;,,,&quot;index.html&quot;,,,,,,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, &quot;%A_ScriptDir%\hhc.exe&quot; &quot;%Chm_Tmp_Pth%\default.hhp&quot;,, Hide
   SplashImage, Off

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

   AllSubFlFldList =
   Index_Html =
   list =
   hhp =
Return

ComUnHTML(html) {
   oHTML := ComObjCreate(&quot;HtmlFile&quot;)
   oHTML.write(html)
   return oHTML.documentElement.innerText
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (DD)]]></author>
			<pubDate>Fri, 22 Jul 2016 13:23:14 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=106274#p106274</guid>
		</item>
	</channel>
</rss>
