1 (изменено: sabir.yanin2014, 2016-04-18 00:18:53)

Тема: 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% 
 

2

Re: AHK:Добавление скриптов в меню автозапуска (на примере автозамен)

sabir.yanin2014 пишет:

Я захотел добавить его в меню автозапуска, но так как скрипт это документ, а не исполняемый файл,  добавить напрямую его не удалось.

Просто добавьте его или ярлык в папку автозагрузки.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Malcev, 2016-04-18 13:52:26)

Re: AHK:Добавление скриптов в меню автозапуска (на примере автозамен)

Либо в реестре прописать путь к скрипту:
Вот reg файл, который прописывает скрипт находящийся на C:\watchfolder.ahk в автозапуск.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"WatchFolder.ahk"="\"C:\\WatchFolder.ahk\""

Но только надо учесть, что при таком запуске рабочая папка скрипта не будет идентичной папке со скриптом.
И если в скрипте используются относительные пути вписать:

SetWorkingDir %A_ScriptDir%

4

Re: AHK:Добавление скриптов в меню автозапуска (на примере автозамен)

teadrinker, спасибо! Оказывается можно очень просто добавлять любые документы и файлы в меню автозагрузки. Для этого нужно найти папку Startup и бросить туда ярлык документа или файла. Поискав в интернете, нашел: С-ProgramData – Microsoft – Windows – Start Menu – Programs – Startup. Попытался пройти по данному пути (кстати чтобы увидеть ProgramData нужно разрешение показывать скрытые файлы) : прошел С-ProgramData – Microsoft – Windows. Все. Папки с именем Start Menu нет. Создал утилиту которая ищет папку с нужным именем . Ввел имя Startup, задал область поиска
выбрав в диалоговом окне ProgramData.  MsgBox  выдал результат:
C :\ProgramData\ Microsoft\Windows \Start Menu \ Programs \Startup , хотя повторяю папки Start Menu я не нашел. Дальше скрипт успешно открыл папку Startup (у меня называется Автозагрузка)
Вообщем русская локализация добавила путаницы-путь которым я должен был пройти:
С-ProgramData – Microsoft – Windows-Главное меню-Программы-Автозагрузка.  Утилита которая мне помогла:


InputBox, Name, Введите название папки, Введите название папки
if Name=
{
MsgBox Вы не ввели имя папки!`nВыход из программы!
return
}
FileSelectFolder, find ,  ,  , Откуда начнем поиск?
Loop, %find%\*.*, 2, 1 ; Рекурсия в подпапки.
{
Dir=%A_LoopFileFullPath%
SplitPath, Dir, File
if File=%Name%
break
}
MsgBox %Dir%
Run, "%Dir%"

*Встроенная функция поиск проводника мне ничего не дала

5

Re: AHK:Добавление скриптов в меню автозапуска (на примере автозамен)

Встроенная переменная A_Startup содержит путь к папке автозагрузки.
Что бы открыть ее достаточно использовать команду

Run, % A_Startup