1 (изменено: Nirra, 2012-12-28 02:45:23)

Тема: AHK: "портирование" Макроса х7 мышки на AHK макрос

Доброго времени суток. У меня есть замечательный макрос, сделанный в Oscar Editor для мышей х7. Мне подсказали про замечательную программу AHK. После того как я немного почитал про AHK и нашёл парочку программ на AHK, понял что процедура, которую я хочу провернуть, вполне выполнима для AHK. Что я собственно хочу сделать: перевести макрос х7 в софтварный вид, а именно портирование на AHK.

Сам макрос х7.


<Root>
    <DefaultMacro>
        <Major></Major>
        <Description>Full Air Hugging


</Description>
        <Comment>AH
</Comment>
        <GUIOption>
            <RepeatType>1</RepeatType>
        </GUIOption>
        <KeyUp>
            <Syntax></Syntax>
        </KeyUp>
        <KeyDown>
            <Syntax>KeyDown 32 1
Delay 26 ms
KeyUp 32 1
Delay 26 ms
KeyDown 265 1
Delay 26 ms
KeyUp 265 1
Delay 15 ms
KeyDown 265 1
Delay 26 ms
KeyUp 265 1
Delay 15 ms
LeftDown 1
Delay 230 ms
LeftUp 1
Delay 20 ms
KeyDown 30 1
Delay 26 ms
KeyUp 30 1
Delay 26 ms
KeyDown 265 1
Delay 26 ms
KeyUp 265 1
Delay 15 ms
KeyDown 265 1
Delay 26 ms
KeyUp 265 1
Delay 15 ms
LeftDown 1
Delay 230 ms
LeftUp 1</Syntax>
        </KeyDown>
        <Software>S4LAH
</Software></DefaultMacro>
</Root>

Что он делает (русским языком):


Нажать 3
пауза 26 ms
Отпустить 3
пауза 26 ms
Нажать Шифт
пауза 26 ms
Отпустить шифт
пауза 15 ms
нажать шифт
пауза 26 ms
отпустить шифт
пауза 15 ms
нажать левую кнопку мыши
пауза 230 ms
отпустить левую кнопку мыши
пауза 20 ms
Нажать 1
пауза 26 ms
отпустить 1
пауза 26 ms
Нажать Шифт
пауза 26 ms
Отпустить шифт
пауза 15 ms
нажать шифт
пауза 26 ms
отпустить шифт
пауза 15 ms
Нажать левую кнопку мыши
пауза 230 ms
Отпустить левую кнопку мыши

Макрос стоит на параметре: нажать - старт, отпустить - стоп. (допустим установлен на кнопку 7, удерживаем кнопку 7 макрос непрерывно повторяется, отпускаем - заканчивается.)

Почему я решил, что возможно AHK мне поможет в этом деле, есть программа автокликер мыши. (если надо, скину) Которая при нажатии F1 - активируется, а при повторно F1 - деактивируется. Делает следующее: при активации, вместо одного щелчка мыши получаем 2 с промежутком в 200мс, или при удержании лкм, очень часто нажимает лкм автоматически. (я хочу сделать, допустим при нажатии ф1 - активируется, также деактивируется. В активном режиме, при удержании СКМ (средней кнопки мыши) воспроизводился макрос по циклу, как у х7, при отпустке СКМ - прекращался. Захотел выключить? Нажал на ф1. Причом, программа не привязывается к определённому окну, а работает везьде, где бы её не применили, абсолютно в любом активно окне, даже если его не видно в процессах диспетчера задач.

Я понимаю, что за меня никто и ничего делать не будет, я просто хочу хотябы малейшей помощи, куда мне смотреть, или есть какие-то примеры, хоть приблизительные. Вообщем, прошу хотя-бы ткнуть носом в нужное русло. Заранее огромное Вам спасибо за помощь!

2

Re: AHK: "портирование" Макроса х7 мышки на AHK макрос

Почитайте тут: http://www.script-coding.com/AutoHotkeyTranslation.html про команды Send, Click, Sleep.

3

Re: AHK: "портирование" Макроса х7 мышки на AHK макрос

Nirra, ознакомься с этой темой, оформи заголовок по правилам.

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

4

Re: AHK: "портирование" Макроса х7 мышки на AHK макрос

Началось всё с простого. Нужно было разобраться с кнопочками и делаями\слипами.
Думал осталось дело за малым. Нужно сделать, чтобы при удержании MButton всё повторялось. Увидел темку похожую, но там ответа так и не нашёл. Сделал нечто похожее, что и там, и макрос получился в следующем виде:


SendMode, Input
MButton::
{
Send {3 down {Sleep, 30}}
Send {3 up}
Sleep, 30
Send {LShift 2}
Sleep, 25
Send {Click down {Sleep, 200}}
Send {Click up}
Sleep, 25
Send {1}
Sleep, 30
Send {LShift 2}
Sleep, 25
Send {Click down {Sleep, 230}}
Send {Click up}
}
Return

Но макрос воспроизводится единожды.
Затем почитал немного про GetKeyState, Loop, Goto, соединил быстро переварившуюся информацию и вышло следующее:


SendMode, Input

MButton::
проверка:
loop
{
Sleep, 10
GetKeyState, state, MButton, P
if state = D;
goto начало
else
break
}
начало:
{
Send {3 down {Sleep, 30}}
Send {3 up}
Sleep, 30
Send {LShift 2}
Sleep, 25
Send {Click down {Sleep, 200}}
Send {Click up}
Sleep, 25
Send {1}
Sleep, 30
Send {LShift 2}
Sleep, 25
Send {Click down {Sleep, 230}}
Send {Click up}
}
goto проверка
Return

И вот тут произошла вообще каварная ситуация, когда часть кода с нажатием клавиш начала повторяться без остановки, даже с отпущенной клавишей MButton (стоило лишь нажать на неё 1 раз и.... понеслась... еле остановил хД)

Ткните, пожалуйста, как-то по-глубже ^__^

5

Re: AHK: "портирование" Макроса х7 мышки на AHK макрос

goto начало и break у вас ведут к одному и тому же результату. Про команду break вы разве не читали? Break выводит вас за пределы кода loop, т.е. как раз на метку начало.

6

Re: AHK: "портирование" Макроса х7 мышки на AHK макрос

Break - разрушает цикл - это я читал. Если я хоть что-нибудь ставлю вместо break, то при нажатии MButton ничего не происходит. Можно ли пойти как-то другим путём? Например получить GetKeyState, state, MButton, P и если D > то While state = D выполнять {мой скрипт}. Или я уже о чём-то замудром примудром начинаю думать?))

7 (изменено: Nirra, 2012-12-28 12:32:31)

Re: AHK: "портирование" Макроса х7 мышки на AHK макрос

YMP Огромное спасибо, почему-то ваше сообщение натолкнуло меня на отличную мысль.


SendMode, Input

начало:
KeyWait, MButton, D::
{
Send {3 down {Sleep, 30}}
Send {3 up}
Sleep, 30
Send {LShift 2}
Sleep, 25
Send {Click down {Sleep, 200}}
Send {Click up}
Sleep, 25
Send {1}
Sleep, 30
Send {LShift 2}
Sleep, 25
Send {Click down {Sleep, 230}}
Send {Click up}
}
goto начало
Return

Теперь всё работает, осталось разобраться почему так быстро, у макроса с мышки гораздо медленней эффект. Попробую поработать с таймингами.
Всё, тему можно объявлять закрытой. Всем спасибо ^___^

8 (изменено: creature.ws, 2013-01-12 09:15:27)

Re: AHK: "портирование" Макроса х7 мышки на AHK макрос

Синтаксис какого языка используется в сообщении #7?

MButton::
    SetKeyDelay, 30, 30
    loop {
        Send {3}{LShift 2}
        Click D
        Sleep 230
        Click U
        Sleep 20
        Send {1}{LShift 2}
        Click D
        Sleep 230
        Click U
    }
    until !GetKeyState("Mbutton", "P")
    return

9

Re: AHK: "портирование" Макроса х7 мышки на AHK макрос

Работают они одинаково Оо Но у Вас компактней
Тем не менее, всё сделано, ещё раз спасибо. Дальше придётся разбираться с x-trap, а то он не любитель таких вещей, как оказалось. Якобы "не используйте Send'ы" и читы