Тема: AHK: Скрипт для быстрого тестиров. кода, выложенного на Web-странице
Скрипт для быстрого тестирования скриптового (или аналогичного) кода, выложенного на Web-страницах, например, на страницах форумов.
Скрипт помогает автоматизировать следующие действия: скопировать выделенный в браузере код в буфер, создать временный текстовый файл на диске с нужным расширением, открыть файл в выбранном текстовом редакторе, вставить туда код, а при необходимости ещё открыть выбранный файловый менеджер и/или командный интерпретатор на каталоге с этим временным файлом. Настроен для работы только в браузерах (FF, IE, Опера).
Использование: выделить в браузере текстовый фрагмент, нажать Win+T или Win+Средняя кнопка мыши, выбрать расширение, затем, при необходимости, выбрать кодировку.
Все настройки осуществляются через testing.ini, который должен лежать рядом со скриптом. При первом запуске testing.ini будет автоматически создан, если его нет. Структура testing.ini - ниже.
Секция [general] обязательна:
* параметр "folder" должен присутствовать обязательно и содержать путь к каталогу временных файлов для создания временных файлов скриптов;
* параметр "extensions" должен присутствовать обязательно и содержать все нужные расширения, разделённые запятыми; для каждого расширения ниже обязательно должна присутствовать одноимённая секция.
Секция [имя_расширения]:
* параметр "editor" должен присутствовать обязательно и содержать путь к текстовому редактору, можно с дополнительными параметрами командной строки;
* параметр "filemanager" опционален и обеспечивает запуск файлового менеджера; должен содержать путь к файловому менеджеру, можно с дополнительными параметрами командной строки;
* параметр "cmd=True" опционален и обеспечивает запуск командного интерпретатора;
* параметр "selectCoding=True" опционален и обеспечивает выбор кодировки ("UTF-8" или "ANSI") для создания файла; если его нет, файл создаётся в кодировке ANSI.
;======================================Секция автовыполнения=======================================
CreateINI() ; создаёт INI-файл "по умолчанию", если его нет
;======================================Хоткеи======================================================
#vk54:: ; Win+T
#MButton:: ; Win+Средняя кнопка мыши
WinGet, hwnd, ID, A
WinGetClass, class, A
If(class = "MozillaUIWindowClass" or class = "IEFrame" or class = "OperaWindowClass")
Gosub, CodeTesting
Return
;======================================Метки=======================================================
CodeTesting:
extension =
; Получаем список расширений:
IniRead, exts, %A_ScriptDir%\testing.ini, general, extensions
If(exts = "ERROR")
{
MsgBox, Неверный формат INI-файла! Не указан параметр extensions в секции general.
ExitApp
}
; Разбираем список расширений и генерируем меню:
Loop, parse, exts, `,
{
Menu, SelectMenu, Add, %A_LoopField%, labelExtension
}
Menu, SelectMenu, Show ; отображаем меню со списком расширений
If(extension = "") ; если ничего не выбрано, завершаем работу
{
Return
}
WinActivate, ahk_id%hwnd% ; активизируем окно браузера
ClipSaved := ClipboardAll ; сохраняем содержимое буфера обмена
Clipboard := ; очищаем буфер обмена
SendInput, ^{vk43} ; посылаем Ctrl+C (копировать выделенное в буфер)
ClipWait, 1 ; ждём появления данных в буфере 1 секунду
; Проверяем необходимость выбора кодировки:
IniRead, selCod, %A_ScriptDir%\testing.ini, %extension%, selectCoding
codingSel = ANSI ; кодировка по умолчанию
If(selCod = "True")
{
coding =
Menu, SelectCoding, Add, UTF-8, labelCoding
Menu, SelectCoding, Add, ANSI, labelCoding
Menu, SelectCoding, Show ; выбор кодировки ("UTF-8" или "ANSI")
If(coding = "") ; если ничего не выбрано, завершаем работу
{
Return
}
codingSel := coding
}
CodeForTesting =
If(codingSel = "ANSI")
{
CodeForTesting := Clipboard
}
Else ; UTF-8
{
Transform, CodeForTesting, Unicode
}
Clipboard := ClipSaved ; восстановление содержимого буфера
If(CodeForTesting = "")
{
MsgBox, Не обнаружен код для тестирования! Возможно, при запуске не было ничего выделено.
Return
}
; Получаем папку для расположения скриптов:
IniRead, fold, %A_ScriptDir%\testing.ini, general, folder
If(fold = "ERROR")
{
MsgBox, Неверный формат INI-файла! Не указан параметр folder в секции general.
ExitApp
}
FileCreateDir, %fold% ; создаём папку, если её нет
FileDelete, %fold%\test.%extension% ; удаляем файл, если он есть
FileAppend, %CodeForTesting%, %fold%\test.%extension% ; записываем файл
; Получаем путь к текстовому редактору:
IniRead, edit, %A_ScriptDir%\testing.ini, %extension%, editor
If(edit = "ERROR")
{
MsgBox, Неверный формат INI-файла! Не указан параметр editor в секции %extension%.
ExitApp
}
Run, %edit% "%fold%\test.%extension%" ; запускаем текстовый редактор
; Получаем путь к файловому менеджеру:
IniRead, fileman, %A_ScriptDir%\testing.ini, %extension%, filemanager
If(fileman != "ERROR")
{
Run, %fileman% "%fold%\test.%extension%" ; запускаем файловый менеджер
}
; Проверяем необходимость запуска cmd.exe:
IniRead, commd, %A_ScriptDir%\testing.ini, %extension%, cmd
If(commd = "True")
{
Run, %comspec% /k cd %fold% ; запускаем cmd.exe
}
Return
labelExtension:
extension = %A_ThisMenuItem%
Return
labelCoding:
coding = %A_ThisMenuItem%
Return
;======================================Функции=====================================================
; Создаёт INI-файл "по умолчанию", если его нет.
CreateINI()
{
IfNotExist, %A_ScriptDir%\testing.ini
{
FileAppend,
(
[general]
folder=C:\Temp\Testing
extensions=ahk,bat,cmd,css,html,hta,js,mf,py,pyw,vbs,wsf
[ahk]
editor="%windir%\notepad.exe"
filemanager=explorer /select,
[bat]
editor="%windir%\notepad.exe"
cmd=True
[cmd]
editor="%windir%\notepad.exe"
cmd=True
[css]
editor="%windir%\notepad.exe"
[html]
editor="%windir%\notepad.exe"
filemanager=explorer /select,
[hta]
editor="%windir%\notepad.exe"
filemanager=explorer /select,
[js]
editor="%windir%\notepad.exe"
cmd=True
filemanager=explorer /select,
[py]
editor="%windir%\notepad.exe"
cmd=True
selectCoding=True
[pyw]
editor="%windir%\notepad.exe"
filemanager=explorer /select,
selectCoding=True
[mf]
editor="%windir%\notepad.exe"
filemanager=explorer /select,
[vbs]
editor="%windir%\notepad.exe"
cmd=True
filemanager=explorer /select,
[wsf]
editor="%windir%\notepad.exe"
cmd=True
filemanager=explorer /select,
), %A_ScriptDir%\testing.ini
}
}
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.