1 (изменено: Алексей, 2011-07-16 16:42:05)

Тема: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

Здравствуйте!
Я использую в работе программу Autodesk Maya и дополнительно использую AutoHotkey, чтобы переназначить клавиши, на которые нельзя назначить команды внутри Maya.

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

В идеале мне нужны такие режимы:
a) Зажал кнопку - проигралась ОДИН раз команда не зависимо от того сколько я держу её зажатой, секунду или час, отпустил - ничего не произошло.
b) Зажал кнопку - проигралась ОДИН раз команда не зависимо от того сколько я держу её зажатой, секунду или час, отпустил - и ещё раз проигралась команда.

2

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

Вот один из вариантов. Может не работать, просто разберите его.

q::
IF flag <> 1
{
ControlSendRaw,,  blalbla1 ; какие-либо действия
flag := 1
}
return

q Up::
IF flag = 1
{
ControlSendRaw,,  blalbla2 ; какие-либо действия
flag := 0
}
return

3

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

ypppu пишет:

Вот один из вариантов.

Это делается не так:

Capslock::
   Send !e
   KeyWait, Capslock   ; ожидаем отпускания Capslock
   Return
Capslock::
   Send !e
   KeyWait, Capslock   ; ожидаем отпускания Capslock
   Send !e
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

Ещё варианты.

5

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

teadrinker пишет:
ypppu пишет:

Вот один из вариантов.

Это делается не так

Да, у меня для более тяжёлого случая.

6

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

Ребят выражаю Вам ОГРОМНУЮ благодарность за помощь, отдельно хочу сказать спасибо teadrinker, за сообразительность.
Пока довольный я, писал Вам сообщение и тут случилась беда.

Если перенаправить на Caps Lock комбинацию !e, то всё работает идеально, но, как только я переназначил на Caps Lock чистую клавишу "D", без дополнительных Ctrl\Alt или Shift, то по какой-то причине команда проигрывается два раза и инструмент выключается не успев ещё включиться.

Пример:

Capslock::
Send d
KeyWait, Capslock ; ожидаем отпускания Capslock
Send d
Return

7

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

Алексей, я проверил в Блокноте - всё работает, как Вы и написали:

Алексей пишет:

b) Зажал кнопку - проигралась ОДИН раз команда не зависимо от того сколько я держу её зажатой, секунду или час, отпустил - и ещё раз проигралась команда.

8

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

Работает, но если нажать и задержать (независимо от времени), то сразу два раза проиграется команда, это, если переназначить на "голую" клавишу "D" без дополнительных клавиш. Когда переназначаю точно такую команду, но уже с дополнительными клавишами например Ctrl+Alt+D, и если зажать Caps Lock, то в этом случает команда проигрывается один раз, как и положено.

Вот какие чудеса.

9

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

Просто не могу понять, что тому причина в коде или в Майя.

10

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

В коде проблем нет, просто не все программы воспринимают посылы клавиш от AHK.

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

11

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

Я выяснил в чем причина. Оказывается, если в Майя на кнопку назначена команда и на Press и на Release, а потом вы эту кнопку переводите при помощи АвтоХоткея на другую кнопку например, как в моём случае это КапсЛок, то получается, что проигрывается при каждом нажатии КапсЛока по два раза одна команда.

Нажал КапсЛок проигралась команда дважды, отпустил проигралась дважды.

Это видимо связано со спецификой АвтоХоткея.

12 (изменено: MixaLich, 2011-07-19 12:58:55)

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

Если я правильно понял, то действия для Press и Release в Майа мы можем назначить на любые клавиши или сочетания, в таком случае можно попробовать разделить назначение сочетания !е Press на одну клавишу и !e Release на другую клавишу назначив её как Press. Тоесть, возьмем две другие клавиши или сочетания и будем с ними работать, так как саму !e или d вы будете использовать и её расчленять не желательно. После переназначения применить аналогичный предыдущим скрипт:

#usehook, on
Capslock::
send, {x} ;на нее настроим действие как на !e Press
KeyWait, Capslock
send, {s} ;на нее настроим действие на Press, но которое раньше в сочетании !e было как Release
return

Если нажатие этих клавиш опять даст повторный эффект, то почему не сделать в майа эти команды на сочетаниях клавиш которые вы просто не будете использовать, а между тем интересующий вас скрипт будет работать, а функциональную клавишу оставите на d или !е или другую, её AHK собственно трогать не будет.

13

Re: AHK: бесконечное проигр. команды Autodesk Maya при зажатой клавише

Благодарю за ответ.

К сожалению в Майке напрямую, так сделать нельзя. Можно только на одну команду назначить либо Press, либо Release или сразу вместе Press/Release, нажал проигралась команда, отпустил и ещё раз проигралась такая же команда. Это сделано для того, чтобы была возможность включить временно инструмент, для быстрого редактирования и сразу же выключить. Так устроена Майя.

Пример назначения клавиши:
http://img189.imageshack.us/img189/1336/unled1du.png

Я на данный момент так и делаю, назначаю мудрёные сочетания клавиш (Ctrl+Alt+P и т. п.), а потом при помощи АвтоХоткея перевожу их на недоступные для Майя ранее клавиши, например CapsLock или NumLock.

Оказалось, что АвтоХоткей, когда переносит клавишу, то он не понимает, есть ли в Майя такая возможность делать Press/Release, поэтому напрямую переносит и Press и Release одновременно.
А если дать выбор, например переносить только нажатие или переносить только отпускание, то я думаю проблем бы с этим не было.

По сути можно сделать, чтобы: нажал одна команда проигралась, отпустил другая, но это надо разбираться в скрипто-писании или программировании для Майя (MEL\Python\C++ и т. д.). Я всего-навсего обычный 3Д художник, который пытается улучшить среду в которой работает.