1

Тема: AutoHotkey: Сохранение веб-страницы в формат mht одной клавишей

Скрипт предназначен для работы в браузерах Internet Explorer, Opera, Avant Browser. При нажатии клавиши F2 скрипт совершает за пользователя действия по вызову диалога сохранения, выбору формата mht, изменению имени сохраняемого файла в случае, если имя совпадает с уже имеющимися (добавляет или увеличивает номер).
Файл сохраняется в папку по умолчанию. Изменить эту папку можно, нажав комбинацию Ctrl-F2.
Работа скрипта проверялась в IE 6.0 (WinXP SP1), Opera 9.02, Avant Browser 8.02 и 11.0
В Опере при изменении папки по умолчанию скрипт вызывает диалог настроек, посылая в окно комбинацию Ctrl-F12. Если вы в Опере переназначили это сочетание на какое-нибудь другое действие, учтите этот факт. Также учтите, что навигация в окне настроек к нужной вкладке осуществляется имитацией щелчков мыши в определённых точках (по координатам), так что этот процесс зависит от геометрии этого окошка в конкретной версии Оперы.
В IE и Аванте при изменении папки сохранения считывается/изменяется параметр Save Directory в разделе реестра HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main .

;--------------------- Internet Explorer --------------------

#ifWinActive, ahk_class IEFrame

F2:: SaveAsMHT("Сохранение веб-страницы", 2, 0, 1)
^F2:: ChooseFolder("IE")

;--------------------------- Opera --------------------------

#ifWinActive, ahk_class OpWindow

F2:: SaveAsMHT("Сохранить как", 3, 4)
^F2:: ChooseFolder("Op")

;------------------------ Avant Browser ----------------------

#ifWinActive, ahk_class TfrmAvantBrowser

F2:: SaveAsMHT("Сохранение веб-страницы", 2)
^F2:: ChooseFolder("AB")

#ifWinActive, ahk_class TfrmAvantBrowser.UnicodeClass

F2:: SaveAsMHT("Сохранение веб-страницы", 2)
^F2:: ChooseFolder("AB")

;-------------------------------------------------------------

#ifWinActive

;--------------------------- Функции -------------------------

SaveAsMHT(DlgTitle, MHT_line, TrimCount=0, IE=0)
{
  if IE
    Send, {Alt}{Down 5}{Enter}
  else
    Send, ^{vk53}                    ; Ctrl-S
  WinWait, %DlgTitle%,, 3
  if ErrorLevel
    Exit
  Control, Choose, %MHT_line%, ComboBox3
  Loop 30
  {
    Sleep, 100
    ControlGet, Files, List,, SysListView321
    if Files
      Break
  }
  ControlGetText, FileName, Edit1
  StringTrimRight, BaseName, FileName, %TrimCount%
  Loop
  {
    if not InStr(Files, FileName)
      Break
    else
    {
      FileName:=BaseName . "_" . A_Index+1 . ".mht"
    }
  }
  ControlSetText, Edit1, %FileName%
  Sleep, 100
  ControlSend, Button2, {Enter}
}


ChooseFolder(BrowserName)
{
  if(BrowserName="IE" || BrowserName="AB")
  {
    RegRead, SaveDir, HKCU, Software\Microsoft\Internet Explorer\Main
            , Save Directory
    FileSelectFolder, SaveDir, *%SaveDir%, 3
      , Выбор папки сохранения по умолчанию`n          (выделена текущая папка)
    if ErrorLevel
      Return
    RegWrite, REG_SZ, HKCU, Software\Microsoft\Internet Explorer\Main
            , Save Directory, %SaveDir%
  }
  else if(BrowserName="Op")
  {
    Send, ^{F12}                   ; Ctrl-F12
    WinWait, Настройки,, 3
    if ErrorLevel
      Return
    CoordMode, Mouse, Relative
    Click, 260, 55
    Click, 50, 190
    Click, 456, 366, 0
  }
}