Тема: AHK:Добавление скриптов в меню автозапуска (на примере автозамен)
В учебнике AHK я нашел простой эффективный скрипт для создания Автозамен:
#h:: ; горячая клавиша Win+H
; Получаем текущий выделенный текст. Вместо "ControlGet Selected" используется
; буфер обмена, так как он есть в большинстве редакторов
; (т.е. текстовых процессоров). Сохраняем текущее содержимое буфера обмена,
; чтобы восстановить его позднее. Хотя обрабатывается только простой текст,
; это все же лучше, чем ничего:
AutoTrim Off ; Сохраняет любой межстрочный интервал и пробел в конце текстовой строки в буфере обмена.
ClipboardOld = %ClipboardAll%
Clipboard = ; Чтобы обнаружение заработало, нужно начать с пустого значения.
Send ^c
ClipWait 1
if ErrorLevel ; Время ожидания ClipWait вышло.
return
; Заменяем CRLF и/или LF на `n, чтобы использовать в строке автозамены опцию "send-raw" (R):
; Тоже самое делаем с любыми другими символами, иначе
; могут возникнуть проблемы в "сыром" режиме:
; Делаем эту замену вначале, чтобы избежать помех со стороны тех, которые идут далее.
StringReplace, Hotstring, Clipboard, ``, ````, All
StringReplace, Hotstring, Hotstring, `r`n, ``r, All ; В MS Word...`r работает лучше, чем `n.
StringReplace, Hotstring, Hotstring, `n, ``r, All
StringReplace, Hotstring, Hotstring, %A_Tab%, ``t, All
StringReplace, Hotstring, Hotstring, `;, ```;, All
Clipboard = %ClipboardOld% ; Восстанавливаем предыдущее содержимое буфера обмена.
; Каретка поля ввода (InputBox) устанавливается в более удобную позицию:
SetTimer, MoveCaret, 10
; Показываем поле ввода (InputBox), обеспечивая строку автозамены по умолчанию:
Text1 := "Напечатайте вашу аббревиатуру в указанном месте. "
Text2 := "При желании вы можете отредактировать текст замены."
Text3 := "`nПример:`n:R:btw`::by the way"
InputBox, Hotstring, Новая автозамена, %Text1%%Text2%%Text3%,,,,,,,, :R:`::%Hotstring%
if ErrorLevel <> 0 ; Пользователь нажал Cancel.
return
IfInString, Hotstring, :R`:::
{
MsgBox Вы не напечатали аббревиатуру. Строка автозамены не добавлена.
return
}
; Иначе, добавляем строку автозамены и перезагружаем скрипт.
; Помещаем `n в начало, в случае, если в конце файла нет пустой строки.
FileAppend, `n%Hotstring%, %A_ScriptFullPath%
Reload
; В случае успешного завершения перезагрузка закроет этот экземпляр скрипта в режиме ожидания,
; поэтому строка ниже никогда не будет исполнена.
Sleep 200
Text1 := "Только что добавленная строка неверно отформатирована. "
Text2 := "Открыть файл для форматирования? "
Text3 := "Обратите внимание, что неисправные строки автозамены находятся внизу скрипта."
MsgBox, 4,, %Text1%%Text2%%Text3%
IfMsgBox, Yes, Edit
return
MoveCaret:
IfWinNotActive, Новая автозамена
return
; Иначе, передвигаем курсор в поле ввода туда, где пользователь напечатает аббревиатуру.
Send {Home}{Right 3}
SetTimer, MoveCaret, Off
Return
Скрипт обновляет свой словарный запас в процессе работы и очень помогает экономить время при написании текста и скриптов. Я захотел добавить его в меню автозапуска, но так как скрипт это документ, а не исполняемый файл, добавить напрямую его не удалось. Пришла идея создать дополнительный скрипт для запуска основного скрипта (автозамены) , который я уже могу скомпилировать и поставить в автозапуск. Но написать единичный скрипт для выполнения этой задачи мне показалось мало, так как задача типовая. Хотелось создать какую то простую утилиту которая будет выдавать такие одноразовые скрипты как горячие пирожки.
Схема такая:
запустил утилиту >> появилось диалоговое окно в котором мы находим основной скрипт >> создается скомпилированный скрипт, целью которого является запуск основного файла >> ставим этот скрипт в меню автозапуска. Все
Вот утилита:
t1=--------------------Создание исполняемого файла.
t2=Выберите файл который будет запускаться -----------------
FileSelectFile, FileDir, , ,%t1%%t2%
SplitPath, FileDir, File
FileName:=SubStr(File, 1, InStr(File, ".") -1)
if FileName=
return
MsgBox исполняемый файл %FileName% будет создан на рабочем столе
NewScript=Run, "%FileDir%"
FileAppend, % NewScript, C:\%FileName%EXE.ahk
Run, C:\Program Files\AutoHotkey\Compiler\Ahk2Exe /in C:\%FileName%EXE.ahk /out C:\%FileName%EXE.exe
sleep 100
FileDelete, C:\%FileName%EXE.ahk
sleep 100
FileMove, C:\%FileName%EXE.exe, %A_Desktop%

