<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Запись клавиатурных макросов]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=128&amp;type=atom" />
	<updated>2006-09-02T10:34:44Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=128</id>
		<entry>
			<title type="html"><![CDATA[AHK: Запись клавиатурных макросов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=560#p560" />
			<content type="html"><![CDATA[<p>Во многих текстовых редакторах есть возможность записывать так называемые &quot;макросы&quot;. Например, в Notepad++ можно нажать Ctrl+Shift+R, чтобы начать запись, затем сделать какие-то действия на клавиатуре, затем опять нажать Ctrl+Shift+R, чтобы закончить запись. После этого Ctrl+Shift+P позволяет много раз прокрутить (выполнить) этот макрос. Это бывает очень удобно для редактирования кода.&nbsp; Например, есть код типа такого (пример, конечно, несколько надуман, но суть проблемы демонстрирует):</p><div class="codebox"><pre><code>АгрегатныйОбъект.Поле1 = Поле2
АгрегатныйОбъект.Поле2 = Поле2
АгрегатныйОбъект.Поле3 = Поле2
...</code></pre></div><p>Допустим, этот код надо быстро переделать в такой:</p><div class="codebox"><pre><code>АгрегатныйОбъект.Поле1 = Поле1;
АгрегатныйОбъект.Поле2 = Поле2;
АгрегатныйОбъект.Поле3 = Поле3;</code></pre></div><p>Вот тут и пригодится макрос. Первую строку переделываем вручную, &quot;мучаясь&quot; на клавиатуре с переходами, копированиями, вставками и т.д., остальные строки - нажимаем горячую клавишу только что записанного макроса. Иногда это очень экономит время (глаза и пальцы) <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p><p>Однако, возможность записи таких макросов есть не во всех текстовых редакторах. Поэтому предлагаю скрипт AutoHotkey, который решит эту проблему глобально (для любого редактора):</p><div class="codebox"><pre><code>#NoTrayIcon
SendMode Input
KeysCount := 0
;==========================================================
^!sc02D:: ; Ctrl + Alt + X
MsgBox Скрипт &quot;Macro&quot; будет завершён.
ExitApp
Return

^F11:: ; Ctrl + F11 начало записи макроса
ShowMess(&quot;Запись макроса&quot;)
KeysCount := 0 ; количество клавиш (команд) в макросе
Rec := 1 ; флаг записи
Return

+F11:: ; Shift + F11 конец записи макроса
If Rec = 1
    ShowMess(&quot;Конец записи макроса&quot;)
Rec := 0
Return

!F11:: ; Alt + F11 воспроизведение макроса
If Rec = 1
{
    ShowMess(&quot;Запись макроса не завершена&quot;)
    Return
}
If KeysCount = 0
{
    ShowMess(&quot;Нет записанного макроса&quot;)
    Return
}
Loop %KeysCount%
{
    element := Macro%A_Index%
    Send %element%
}
Return
;==========================================================
CloseToolTip: ; убираем ToolTip по таймеру
ToolTip
SetTimer, CloseToolTip, Off
Return

ShowMess(Mess) ; отображаем ToolTip
{
    ToolTip
    ToolTip %Mess%
    SetTimer, CloseToolTip, 500
}

Add(Key) ; запоминание нажатой клавиши
{
    global
    If Rec = 1
    {
        KeysCount += 1
        Macro%KeysCount% := Key
        ShowMess(Key)
    }
}
;==========================================================
; переходы по тексту
~Home:: Add(&quot;{Home}&quot;)
~End:: Add(&quot;{End}&quot;)

~Up:: Add(&quot;{Up}&quot;)
~Down:: Add(&quot;{Down}&quot;)
~Left:: Add(&quot;{Left}&quot;)
~Right:: Add(&quot;{Right}&quot;)

~^Left:: Add(&quot;^{Left}&quot;)
~^Right:: Add(&quot;^{Right}&quot;)

; забой, удаление, пробелы и т.п.
~BackSpace:: Add(&quot;{BackSpace}&quot;)
~Delete:: Add(&quot;{Delete}&quot;)
~Tab:: Add(&quot;{Tab}&quot;)
~Space:: Add(&quot;{Space}&quot;)
~Enter:: Add(&quot;{Enter}&quot;)

; работа с буфером
~^sc02D:: Add(&quot;^{sc02D}&quot;) ; Control + X
~^sc02E:: Add(&quot;^{sc02E}&quot;) ; Control + C
~^sc02F:: Add(&quot;^{sc02F}&quot;) ; Control + V

~^Insert:: Add(&quot;^{Insert}&quot;)
~+Insert:: Add(&quot;+{Insert}&quot;)
~+Delete:: Add(&quot;+{Delete}&quot;)

; выделение текста
~+Left:: Add(&quot;+{Left}&quot;)
~+Right:: Add(&quot;+{Right}&quot;)
~^+Left:: Add(&quot;^+{Left}&quot;)
~^+Right:: Add(&quot;^+{Right}&quot;)
~+Home:: Add(&quot;+{Home}&quot;)
~+End:: Add(&quot;+{End}&quot;)

; цифры
~sc029:: Add(&quot;{sc029}&quot;) ; `
~+sc029:: Add(&quot;+{sc029}&quot;)
~sc002:: Add(&quot;{sc002}&quot;) ; 1
~+sc002:: Add(&quot;+{sc002}&quot;)
~sc003:: Add(&quot;{sc003}&quot;) ; 2
~+sc003:: Add(&quot;+{sc003}&quot;)
~sc004:: Add(&quot;{sc004}&quot;) ; 3
~+sc004:: Add(&quot;+{sc004}&quot;)
~sc005:: Add(&quot;{sc005}&quot;) ; 4
~+sc005:: Add(&quot;+{sc005}&quot;)
~sc006:: Add(&quot;{sc006}&quot;) ; 5
~+sc006:: Add(&quot;+{sc006}&quot;)
~sc007:: Add(&quot;{sc007}&quot;) ; 6
~+sc007:: Add(&quot;+{sc007}&quot;)
~sc008:: Add(&quot;{sc008}&quot;) ; 7
~+sc008:: Add(&quot;+{sc008}&quot;)
~sc009:: Add(&quot;{sc009}&quot;) ; 8
~+sc009:: Add(&quot;+{sc009}&quot;)
~sc00A:: Add(&quot;{sc00A}&quot;) ; 9
~+sc00A:: Add(&quot;+{sc00A}&quot;)
~sc00B:: Add(&quot;{sc00B}&quot;) ; 0
~+sc00B:: Add(&quot;+{sc00B}&quot;)
~sc00C:: Add(&quot;{sc00C}&quot;) ; -
~+sc00C:: Add(&quot;+{sc00C}&quot;)
~sc00D:: Add(&quot;{sc00D}&quot;) ; =
~+sc00D:: Add(&quot;+{sc00D}&quot;)
~sc02B:: Add(&quot;{sc02B}&quot;) ; \
~+sc02B:: Add(&quot;+{sc02B}&quot;)

; буквы
~sc010:: Add(&quot;{sc010}&quot;) ; Q
~+sc010:: Add(&quot;+{sc010}&quot;)
~sc011:: Add(&quot;{sc011}&quot;) ; W
~+sc011:: Add(&quot;+{sc011}&quot;)
~sc012:: Add(&quot;{sc012}&quot;) ; E
~+sc012:: Add(&quot;+{sc012}&quot;)
~sc013:: Add(&quot;{sc013}&quot;) ; R
~+sc013:: Add(&quot;+{sc013}&quot;)
~sc014:: Add(&quot;{sc014}&quot;) ; T
~+sc014:: Add(&quot;+{sc014}&quot;)
~sc015:: Add(&quot;{sc015}&quot;) ; Y
~+sc015:: Add(&quot;+{sc015}&quot;)
~sc016:: Add(&quot;{sc016}&quot;) ; U
~+sc016:: Add(&quot;+{sc016}&quot;)
~sc017:: Add(&quot;{sc017}&quot;) ; I
~+sc017:: Add(&quot;+{sc017}&quot;)
~sc018:: Add(&quot;{sc018}&quot;) ; O
~+sc018:: Add(&quot;+{sc018}&quot;)
~sc019:: Add(&quot;{sc019}&quot;) ; P
~+sc019:: Add(&quot;+{sc019}&quot;)
~sc01A:: Add(&quot;{sc01A}&quot;) ; {
~+sc01A:: Add(&quot;+{sc01A}&quot;)
~sc01B:: Add(&quot;{sc01B}&quot;) ; }
~+sc01B:: Add(&quot;+{sc01B}&quot;)

~sc01E:: Add(&quot;{sc01E}&quot;) ; A
~+sc01E:: Add(&quot;+{sc01E}&quot;)
~sc01F:: Add(&quot;{sc01F}&quot;) ; S
~+sc01F:: Add(&quot;+{sc01F}&quot;)
~sc020:: Add(&quot;{sc020}&quot;) ; D
~+sc020:: Add(&quot;+{sc020}&quot;)
~sc021:: Add(&quot;{sc021}&quot;) ; F
~+sc021:: Add(&quot;+{sc021}&quot;)
~sc022:: Add(&quot;{sc022}&quot;) ; G
~+sc022:: Add(&quot;+{sc022}&quot;)
~sc023:: Add(&quot;{sc023}&quot;) ; H
~+sc023:: Add(&quot;+{sc023}&quot;)
~sc024:: Add(&quot;{sc024}&quot;) ; J
~+sc024:: Add(&quot;+{sc024}&quot;)
~sc025:: Add(&quot;{sc025}&quot;) ; K
~+sc025:: Add(&quot;+{sc025}&quot;)
~sc026:: Add(&quot;{sc026}&quot;) ; L
~+sc026:: Add(&quot;+{sc026}&quot;)
~sc027:: Add(&quot;{sc027}&quot;) ; :
~+sc027:: Add(&quot;+{sc027}&quot;)
~sc028:: Add(&quot;{sc028}&quot;) ; &quot;
~+sc028:: Add(&quot;+{sc028}&quot;)

~sc02C:: Add(&quot;{sc02C}&quot;) ; Z
~+sc02C:: Add(&quot;+{sc02C}&quot;)
~sc02D:: Add(&quot;{sc02D}&quot;) ; X
~+sc02D:: Add(&quot;+{sc02D}&quot;)
~sc02E:: Add(&quot;{sc02E}&quot;) ; C
~+sc02E:: Add(&quot;+{sc02E}&quot;)
~sc02F:: Add(&quot;{sc02F}&quot;) ; V
~+sc02F:: Add(&quot;+{sc02F}&quot;)
~sc030:: Add(&quot;{sc030}&quot;) ; B
~+sc030:: Add(&quot;+{sc030}&quot;)
~sc031:: Add(&quot;{sc031}&quot;) ; N
~+sc031:: Add(&quot;+{sc031}&quot;)
~sc032:: Add(&quot;{sc032}&quot;) ; M
~+sc032:: Add(&quot;+{sc032}&quot;)
~sc033:: Add(&quot;{sc033}&quot;) ; &lt;
~+sc033:: Add(&quot;+{sc033}&quot;)
~sc034:: Add(&quot;{sc034}&quot;) ; &gt;
~+sc034:: Add(&quot;+{sc034}&quot;)
~sc035:: Add(&quot;{sc035}&quot;) ; ?
~+sc035:: Add(&quot;+{sc035}&quot;)

; NumPad
~sc052:: Add(&quot;{Numpad0}&quot;) ; Num0
~sc04F:: Add(&quot;{Numpad1}&quot;) ; Num1
~sc050:: Add(&quot;{Numpad2}&quot;) ; Num2
~sc051:: Add(&quot;{Numpad3}&quot;) ; Num3
~sc04B:: Add(&quot;{Numpad4}&quot;) ; Num4
~sc04C:: Add(&quot;{Numpad5}&quot;) ; Num5
~sc04D:: Add(&quot;{Numpad6}&quot;) ; Num6
~sc047:: Add(&quot;{Numpad7}&quot;) ; Num7
~sc048:: Add(&quot;{Numpad8}&quot;) ; Num8
~sc049:: Add(&quot;{Numpad9}&quot;) ; Num9
~sc053:: Add(&quot;{NumpadDot}&quot;) ; Num Dot
~sc135:: Add(&quot;{NumpadDiv}&quot;) ; Num /
~sc037:: Add(&quot;{NumpadMult}&quot;) ; Num *
~sc04A:: Add(&quot;{NumpadSub}&quot;) ; Num -
~sc04E:: Add(&quot;{NumpadAdd}&quot;) ; Num +
~sc11C:: Add(&quot;{NumpadEnter}&quot;) ; Num Enter</code></pre></div><p>Ctrl + F11 - начинаем запись макроса<br />Shift + F11 - завершаем запись макроса<br />Alt + F11 - воспроизводим макрос<br />Ctrl + Alt + X - завершаем работу скрипта (иконку в трее скрипт не отображает, поэтому это единственный способ корректно завершить работу скрипта)<br />Скрипт обрабатывает только те клавиши, которые я посчитал важными для редактирования кода. Это буквы и цифры с Shift и без него, клавиши для навигации по тексту, забой, удаление, пробелы и т.п., клавиши для выделения текста и работы с буфером обмена. Если вам нужны ещё какие-то клавиши, их довольно легко добавить.</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2006-09-02T10:34:44Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=560#p560</id>
		</entry>
</feed>
